vue3使用element-plus再次封装table组件的基本步骤

 更新时间:2024年03月22日 10:14:04   作者:Software攻城狮  
这篇文章主要介绍了vue3使用element-plus再次封装table组件的基本步骤,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

vue3 使用element-plus 如何再次封装table组件

基本步骤

  • 创建子组件
  • 默认数据配置
  • 在需要使用自定义 Table 组件的地方引入并使用:

创建子组件:

创建一个新的 .vue 文件,例如子组件 baseTable.vue,作为你封装后的 Table 组件。

 <template>
    <div class="base-table-wrapper">
        <el-table :data="tableData" style="width: 100%">
            <template v-for="item in column" :key="item.prop">
                <el-table-column :prop="item.prop" :label="item.label" :width="item.width">
                    <template #default="scope" v-if="!!item.isScope">
                        <slot :name="item.prop+'ScopeContent'" :row="scope.row" />
                    </template> 
                </el-table-column>
            </template>
        </el-table>
    </div>
</template>

<script setup>

const props = defineProps({
    column: {
        type: Array,
        default() {
            return []
        }
    },
    tableData: {
        type: Array,
        default() {
            return []
        }
    },
})

</script>

<style lang="scss" scoped></style>

在需要使用自定义 Table 组件的地方引入并使用:

<template>
<base-table :column="tableColumn" :tableData="recordList"> 
    <!-- 刷卡时间自定义内容 -->
    <template #createTimeScopeContent="slotProps" > 
        <span>{{ parseTime(slotProps.row.eventTime) }}</span>
    </template> 
    <!-- // 刷卡时间自定义内容 -->

    <!-- 事件自定义内容 -->
    <template #typeScopeContent="slotProps" >  
        <dict-tag :options="entrance_type" :value="slotProps.row.event" />
    </template>
    <!-- // 事件自定义内容 --> 


    <!-- 部门自定义内容 -->
    <template #deptNameScopeContent="slotProps" >  
        <span>{{ slotProps.row.deptName || "无" }}</span> 
    </template>
    <!-- // 部门自定义内容 -->  

    <!-- 刷卡地点自定义内容 -->
    <template #controllerNameScopeContent="slotProps" > 
        <dict-tag :options="controller_name" :value="slotProps.row.controllerName" />
    </template>
    <!-- // 刷卡地点自定义内容 --> 
</base-table> 
</template>

<script setup>
const tableColumn = ref([
   {
      label: "刷卡时间",
      prop: "createTime",
      width: "180",
      align: "center",
      isScope: true
   }, {
      label: "事件",
      prop: "type",
      width: "auto",
      align: "center",
      isScope: true
   }, {
      label: "姓名",
      prop: "staffName",
      width: "auto",
      align: "center"
   }, {
      label: "卡号",
      prop: "cardNo",
      width: "auto",
      align: "center"
   }, {
      label: "部门",
      prop: "deptName",
      width: "auto",
      align: "center",
      isScope: true
   }, {
      label: "刷卡地点",
      prop: "controllerName",
      width: "auto",
      align: "center",
      isScope: true
   }
])
</script>

在 Vue 3 中,你可能会遇到“具名插槽”(Named Slots)的概念,它允许你在组件内部定义特定的插槽位置,并在父组件中为这些具名插槽提供内容。

以下是如何在Vue 3中使用具名插槽的一个基本示例:

  • 首先,在子组件(ChildComponent.vue)中定义一个具名插槽:
<template>
  <div>
    <h2>这是子组件的标题</h2>
    <slot name="description">默认描述内容</slot>
    <slot name="footer">默认页脚内容</slot>
  </div>
</template>

在这个例子中,我们定义了两个具名插槽:description 和 footer,并且都提供了默认内容。

  • 然后,在父组件中使用这个子组件并填充具名插槽:
<template>
  <ChildComponent>
    <template v-slot:description>
      <p>这是来自父组件的描述内容</p>
    </template>
    
    <template v-slot:footer>
      <p>这是来自父组件的页脚内容</p>
    </template>
  </ChildComponent>
</template>

在父组件中,我们使用 v-slot 指令(也可以简写为 #)来指定要填充哪个具名插槽,并在其中提供相应的内容。这样,当渲染子组件时,就会在对应的位置插入这些内容。

vue3 使用具名插槽并且传递值

在 Vue 3 中,具名插槽不仅可以用于传递 HTML 结构,还可以配合作用域插槽(Scoped Slots)来传递数据。作用域插槽允许子组件向其插槽内传递数据,而父组件则可以通过插槽提供的回调函数来访问这些数据并在插槽内进行渲染。

下面是一个使用 Vue 3 中具名插槽结合作用域插槽传递值的例子:

子组件 (ChildComponent.vue):

<template>
  <div>
    <h2>这是子组件的数据列表</h2>
    <!-- 定义作用域插槽,传入一个数组 -->
    <ul>
      <li v-for="item in items" :key="item.id">
        <slot :item="item" name="listItem"></slot>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, text: '第一条数据' },
        { id: 2, text: '第二条数据' },
        // ...
      ]
    }
  }
}
</script>

父组件:

<template>
  <ChildComponent>
    <!-- 使用 v-slot 指令接收子组件传递的 item 数据 -->
    <template #listItem="slotProps">
      <div>
        <p>ID: {{ slotProps.item.id }}</p>
        <p>内容: {{ slotProps.item.text }}</p>
        <!-- 这里可以根据 item 数据自定义渲染内容 -->
      </div>
    </template>
  </ChildComponent>
</template>

在上述例子中,子组件 ChildComponent 定义了一个具名插槽 listItem 并且每个插槽都绑定了一个 item 数据。

在父组件中,我们通过 v-slot:listItem=“slotProps” 来接收这些数据,并通过 slotProps.item 访问具体的 item 对象属性。这样父组件就可以根据传递过来的数据自行决定如何渲染每一项列表内容了。

以上就是vue3使用element-plus再次封装table组件的基本步骤的详细内容,更多关于vue3 element-plus再次封装table的资料请关注脚本之家其它相关文章!

相关文章

  • Vue实现二维码数组的全选与反选功能

    Vue实现二维码数组的全选与反选功能

    在开发Web应用程序时,表格数据的展示和操作是非常常见的需求之一,特别是在处理表格中的复选框选择时,我们经常需要实现全选、反选等功能,这篇文章将带你深入了解如何在Vue.js中实现对二维数组数据的全选和反选功能,需要的朋友可以参考下
    2024-09-09
  • vue3中require报错require is not defined问题及解决

    vue3中require报错require is not defined问题及解决

    这篇文章主要介绍了vue3中require报错require is not defined问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • Vue移动端右滑屏幕返回上一页附源码下载

    Vue移动端右滑屏幕返回上一页附源码下载

    这篇文章主要介绍了Vue移动端右滑屏幕返回上一页,本文结合实例给大家介绍的非常详细,并附有源码下载,需要的朋友可以参考下
    2019-06-06
  • Vue实现低版本浏览器升级提示的代码示例

    Vue实现低版本浏览器升级提示的代码示例

    在现代Web开发中,浏览器兼容性是一个重要的问题,尽管大多数用户已经转向了现代浏览器,但仍有一部分用户可能仍在使用老旧的浏览器版本,本文将详细介绍如何在Vue项目中实现低版本浏览器升级提示,并通过多个代码示例来展示不同的应用场景和技术点,需要的朋友可以参考下
    2024-10-10
  • 使用Bootstrap + Vue.js实现表格的动态展示、新增和删除功能

    使用Bootstrap + Vue.js实现表格的动态展示、新增和删除功能

    这篇文章主要介绍了使用Bootstrap + Vue.js实现表格的动态展示、新增和删除功能,需要的朋友可以参考下
    2017-11-11
  • Vue中Mixin&extends的详细使用教程

    Vue中Mixin&extends的详细使用教程

    vue提供了mixin、extends配置项,最近使用中发现很好用,下面这篇文章主要给大家介绍了关于Vue中Mixin&extends的详细使用方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-02-02
  • Element图表初始大小及窗口自适应实现

    Element图表初始大小及窗口自适应实现

    这篇文章主要介绍了Element图表初始大小及窗口自适应实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • elementUI中Table表格问题的解决方法

    elementUI中Table表格问题的解决方法

    这篇文章主要给大家介绍了关于elementUI中Table表格问题的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12
  • vue实现定时刷新数据,每隔5分钟执行一次

    vue实现定时刷新数据,每隔5分钟执行一次

    这篇文章主要介绍了vue实现定时刷新数据,每隔5分钟执行一次问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • electron-vue 运行报错 Object.fromEntries is not a function的解决方案

    electron-vue 运行报错 Object.fromEntries is not a function

    Object.fromEntries() 是 ECMAScript 2019 新增的一个静态方法,用于将键值对列表(如数组)转换为对象,如果在当前环境中不支持该方法,可以使用 polyfill 来提供类似功能,接下来通过本文介绍electron-vue 运行报错 Object.fromEntries is not a function的解决方案
    2023-05-05

最新评论