Vue3 封装el-table组件

06-02 1422阅读

封装一个el-table组件:子组件仅负责事件触发,业务逻辑(如API调用、状态更新)由父组件实现

  
    
    
      
        {{ row.name }}
      
    
    
    
      
        {{ row.price }}
      
    
    
    
      
        {{ row.sn }}
      
    
    
    
      
        
          {{ row.supplier }}
        
      
    
    
    
      
        {{ formatDate(row.storageDate) }}
      
    
    
    
      
        {{ row.region }}
      
    
    
    
    
    
      
        
          修改
        
        
          删除
        
      
    
  


import { defineProps, defineEmits } from 'vue'
import { Edit, Delete } from '@element-plus/icons-vue'
import dayjs from 'dayjs'
const props = defineProps({
  tableData: {
    type: Array,
    required: true,
    default: () => []
  },
  filters: {
    type: Object,
    required: true,
    default: () => ({})
  },
  supplierTagType: {
    type: Object,
    required: true,
    default: () => ({})
  }
})
const emit = defineEmits(['edit', 'delete'])
// 日期格式化
function formatDate(date) {
  return date ? dayjs(date).format('YYYY-MM-DD') : dayjs().format('YYYY-MM-DD')
}
// 筛选方法
const filterData = (value, row, column) => {
  return row[column.property] === value
}
// 操作事件转发
const handleEdit = (row) => {
  emit('edit', row)
}
const handleDelete = (row) => {
  emit('delete', row)
}


.data-table {
  margin-top: 20px;
}

在父组件中使用这个组件,并给他传值:

 

代码解释:

通过:data="tableData"将数组数据与表格绑定

通过:filters和:filter-method实现筛选功能,数据匹配逻辑在filterData方法中定义

声明组件props的语法,通过defineProps函数定义组件需要接收的三个属性

emit方法‌属于Vue 3的setup语法糖,通过defineEmits声明后使用,用于子组件向父组件跨层级通信

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码