首页 > 其他分享 >Vue多层级组件传递动态具名插槽

Vue多层级组件传递动态具名插槽

时间:2023-09-18 19:48:15浏览次数:39  
标签:Vue title default 插槽 item 层级 key 组件 type

这里以一个table组件的二次包装为案例,父组件中使用子组件(table组件)再次包装:

Vue2:

子组件,inTable

<template>
  <table>
    <thead>
      <tr>
        <th
          v-for="(item, index) of columns"
          :key="index">
          {{ item.title }}
        </th>
      </tr>
    </thead>
    <tbody>
      <tr v-for="(item, index) of dataSource" :key="index">
        <td
          v-for="(k, i) in columns"
          :key="i">
          <slot v-if="k.slot" :name="k.slot" :record="item" :value="item[k.key]">
            {{ !item[k.key] && item[k.key] !== 0 ? '-' : item[k.key] }}
          </slot>
          <template v-else>
            {{ !item[k.key] && item[k.key] !== 0 ? '-' : item[k.key] }}
          </template>
        </td>
      </tr>
    </tbody>
  </table>
</template>
<script>
export default {
  props: {
    columns: {
      type: Array,
      default: () => []
    },
    dataSource: {
      type: Array,
      default: () => []
    }
  }
}
</script>

父组件,myTable

<template>
  <div>
    <in-table
      :columns="columns"
      :data-source="dataSource">
      <template
        v-for="t in columns.filter(k => k.slot)"
        #[t.slot]="{value, record}">
        <slot
          :name="t.slot"
          :record="record"
          :value="value"></slot>
      </template>
    </in-table>
  </div>
</template>
<script>
import InTable from './inTable.vue'
export default {
  components: {
    InTable
  },
  props: {
    columns: {
      type: Array,
      default: () => []
    },
    dataSource: {
      type: Array,
      default: () => []
    }
  }
}
</script>

使用示例组件:

<template>
  <div>
    <my-table columns="columns">
      <template #test3="{ value, record }">这里是替换“内容3”的内容</template>
    </my-table>
  </div>
</template>
<script>
import MyTable from './myTable.vue'
export default {
  components: {
    MyTable
  },
  data () {
    return {
      columns: [
        { title: '测试1', key: 'key1' },
        { title: '测试2', key: 'key2' },
        { title: '测试3', key: 'key3', slot: 'test3' }
      ],
      dataSource: [
        { key1: '内容1', key2: '内容2', key3: '内容3' }
      ]
    }
  }
}
</script>

标签:Vue,title,default,插槽,item,层级,key,组件,type
From: https://www.cnblogs.com/szq233/p/17712868.html

相关文章

  • 在Vite和Laravel 10中包含图像的Vue组件
    在使用Vite和Laravel8中包含图像的Vue组件,可以按照以下步骤进行操作:在Vue组件中引入图像:首先,确保将图像文件放置在Laravel项目的公共目录中,例如public/images文件夹。然后,在Vue组件中使用require或import语句引入图像:<template><div><img:src="require('@/images/i......
  • vue3版的uniapp在路由这块有好的方案吗?
    在Vue3版本的uni-app中,你可以使用VueRouter进行路由管理。VueRouter是Vue.js官方提供的路由解决方案,可以方便地实现单页面应用的路由功能。以下是一些在Vue3版的uni-app中使用VueRouter的好的方案:安装VueRouter:首先,在你的uni-app项目中安装VueRouter。可以使用npm或yarn来安......
  • Vue的计算属性和监视属性
    计算属性响应式的传统的实现方法:赋值语法methods实现:{{fullName()}}组件模板应该只包含简单的表达式,复杂的表达式应该重构为计算属性或者方法。Vue中已有的原始属性=>计算属性,计算属性不在_data中,采用对象形式定义如下:computed:{//自定义变量,采用对象形式fullName:{......
  • Vue学习七:自定义创建项目和vuex
    一、自定义创建项目默认的项目有很多包不全,需要的时候还要导包搭架子,因此我们可以自定义创建项目。选择的项目按照自己需要的设置,可参考如下参数设置。(eslink是一种代码规范)二、vuex1、vuex概述vuex是一个vue的状态管理工具,状态就是数据。大白话:vuex是一个插件,可以帮我们......
  • Vue3+vite路由配置优化(自动化导入)
    今天在维护优化公司中台项目时,发现路由的文件配置非常多非常乱,只要只中大型项目,都会进入很多的路由页面,规范一点的公司还会吧路由进行模块化导入,但是依然存在很多文件夹的和手动导入的问题。于是我想到了我之前使用vuex时进行的模块化自动导入js文件,能不能使用到自动导入.vue文件......
  • vue 的 name 和最外层 class命名也需要保证唯一性
    平时为了赶工期,在画页面的时候,会复制框架里面相同样式的页面,直接Ctrl+A  Ctrl+C  Ctrl+V 然后修改字段。这样写节省不少时间,也提高了效率。但是是有隐患的,首先是vue的name,挺重要的比如keepalive时候,exclude  include的name就需要保持一致。(之前踩过坑,vue中name和r......
  • 少年,该升级 Vue3 了!
    你好,我是Kagol。前言根据Vue官网文档的说明,Vue2的终止支持时间是2023年12月31日,这意味着从明年开始:Vue2将不再更新和升级新版本,不再增加新特性,不再修复缺陷虽然Vue3正式版本已经发布快3年了,但据我了解,现在依然还有很多业务在使用Vue2,迟迟没有升级Vue3。为......
  • SAP会计科目编码的层级说明
    SAP会计科目编码的层级说明通过会计教程,我们知道会计科目分一级、二级、三级或更明细的层级。而国产财务软件也是按照这个思路来设计的,这样可以分别按一级科目、二级科目、三级科目查看余额。然而接触SAP后,大家会发现SAP中会计科目都是末级科目,没法像国产软件那样分别查看一级、......
  • Vue3深度解析:reactive和ref的区别你真的了解吗?
    Vue3中引入了CompositionAPI,其中包含了reactive和ref两个核心函数。这两个函数都是用于创建响应式数据的,但它们之间有一些区别。首先,让我们来看一下reactive函数。reactive函数接受一个普通对象作为参数,并返回一个新的响应式对象。这个响应式对象会跟踪所有属性的变化,并在属性发......
  • vue3 computed属性
    该随笔是根据b站小满zs的Vue3+vite+Ts+pinia+实战+源码+electron的视频学习写的,Vue3+vite+Ts+pinia+实战+源码+electron......