element-ui 封装 表格

一、封装表格组件

javascript 复制代码
<template>
  <el-table :data="list" :default-sort="{ prop: 'date' }" style="width: 100%">
    <template v-for="item in tableColumn">
      <el-table-column
        v-if="item.filters"
        :prop="item.prop"
        :label="item.label"
        :sortable="item.sortable"
        :filters="item.filters"
        :filter-method="filterHandler(item.filterMethod)"
      />
      <el-table-column
        v-if="!item.filters"
        :prop="item.prop"
        :label="item.label"
        :sortable="item.sortable"
      />
    </template>
  </el-table>
</template>

<script scoped>
export default {
  data() {
    return {
      list: [],
      tableColumn: [],
    };
  },
  props: {
    data: {
      type: Array,
      default: [],
    },
    column: {
      type: Array,
      default: [],
    },
  },
  watch: {
    data: {
      immediate: true,
      deep: true,
      handler(val) {
        if (val.length) {
          this.list = JSON.parse(JSON.stringify(val));
        }
      },
    },
    column: {
      immediate: true,
      deep: true,
      handler(val) {
        if (val.length) {
          this.tableColumn = JSON.parse(JSON.stringify(val));
        }
      },
    },
  },
  methods: {
    // 如果没传,那么默认等值判断
    filterHandler(filterMethod) {
      if (filterMethod) {
        return item.filterMethod;
      } else {
        return (value, row, column) => {
          const property = column["property"];
          return row[property] === value;
        };
      }
    },
  },
};
</script>

二、使用方法

javascript 复制代码
<template>
  <div id="app"><Tabel :data="data" :column="column" /></div>
</template>

<script>
import Tabel from "@/components/Tabel.vue";
export default {
  components: { Tabel },
  data() {
    return {
      column: [
        {
          label: "日期",
          prop: "date",
          sortable: true,
        },
        {
          label: "姓名",
          prop: "name",
          filters: [{ text: "王小龙", value: "王小龙" }],
        },
        {
          label: "地址",
          prop: "address",
        },
      ],
      data: [
        {
          date: "2016-05-02",
          name: "王小猪",
          address: "上海市普陀区金沙江路 1518 弄",
        },
        {
          date: "2016-05-04",
          name: "王小虎",
          address: "上海市普陀区金沙江路 1517 弄",
        },
        {
          date: "2016-05-01",
          name: "王小龙",
          address: "上海市普陀区金沙江路 1519 弄",
        },
        {
          date: "2016-05-03",
          name: "王小海",
          address: "上海市普陀区金沙江路 1516 弄",
        },
      ],
    };
  },
};
</script>
相关推荐
喜陈1 小时前
解决elementui-plus使用el-table的合计功能时横向滚动条显示在了合计上方
前端·vue.js·elementui
北极糊的狐20 小时前
若依项目通用套路——列表页面提前加载数据塞进下拉框待选项
javascript·vue.js·elementui
浪游东戴河1 天前
电脑基础之excel基础操作
excel·表格·对齐·电脑基础
lyj1689972 天前
el-select+el-tree实现下拉树形选择
javascript·vue.js·elementui
招风的黑耳3 天前
ElementUI元件库——提升Axure原型设计效率与质量
前端·elementui·axure
油丶酸萝卜别吃4 天前
springBoot与ElementUI配合上传文件
spring boot·后端·elementui
Jiaberrr4 天前
介绍几种创意登录页(含完整源码)
前端·javascript·css·elementui·css3
零点七九4 天前
sortablejs el-table 树结构拖拽
javascript·vue.js·elementui·sortablejs
兰德里的折磨5505 天前
对于后端已经实现逻辑了,而前端还没有设置显示的改造
前端·vue.js·elementui
梦想家加一5 天前
elementUI el-image图片加载失败解决
javascript·vue.js·elementui