ElementUI对于表格的二次封装

news/2024/7/10 2:34:03 标签: vue, elementUI, 前端

前言

最近在做的项目中,有大量界面用到了表格(el-table)组件,但是里面具体显示的内容不同,是从后端获取过来的,如果每一个界面写一下el-table的代码的话,会造成代码量大且不易维护的后果,所以就对el-table表格进行了二次封装。

过程

先看一下最终效果

在这里插入图片描述

代码实现

1.抽出来的子组件的代码:

<template>
  <div>
    <!-- 表格部分 -->
    <el-table :data="tableData" stripe border :default-sort="{prop: 'date', order: 'descending'}">
      <!-- 表格业务内容列 -->
      <template v-for="(item, index) in tableOption">
        <el-table-column
          :key="index"
          :prop="item.prop"
          :label="item.label"
          :align="item.align || 'center'"
          :show-overflow-tooltip="item.overHidden || false"
          :min-width="item.width || '100px'"
          :fixed="item.fixed || true"
          :sortable="item.sortable || false"
          :type="item.type || 'normal'"
        ></el-table-column>
      </template>
      <!-- 表格操作列 -->
      <el-table-column label="操作" v-if="isOperate" min-width="150px">
        <template slot-scope="scope">
          <slot name="operate" :row="scope.row"></slot>
        </template>
      </el-table-column>
    </el-table>
  </div>
</template>

<script>
export default {
  data() {
    return {};
  },
  // 父组件向子组件传值
  props: {
    // 表格显示的数据
    tableData: {
      type: Array,
      default: function() {
        return [];
      }
    },
    // 表格的操作
    tableOption: {
      type: Array,
      default: function() {
        return [];
      }
    },
    // 控制操作列是否显示
    isOperate: {
      type: Boolean,
      default: function() {
        return false;
      }
    }
  },
  methods: {}
};
</script>

<style>
</style>

2.父组件中对子组件的引用

①引入子组件

import commonTable from "../../components/table/common-table";

②注册子组件

components: {
  commonTable
},

③覆用子组件

<common-table :tableData="tableData" :tableOption.sync="tableOption" :isOperate="isOperate">
  <!-- 操作列,填充operate的插槽 -->
  <template slot="operate" slot-scope="scope">
    <!-- 具体要显示的按钮可以在这里自定义 -->
    <el-button type="primary" size="mini">查看</el-button>
  </template>
</common-table>
// 表格数据
tableData: [
  {
    id: 1,
    title: "林业信息拉萨解放了书法家",
    status: "APPROVAL_PENDING",
    docAuthor: "zhangshan",
    submitTime: "2020-06-06 23:58:49"
  },
  {
    id: 2,
    title: "林业信息拉萨解放了书法家",
    status: "DRAFT",
    docAuthor: "zhangshan",
    submitTime: "2020-06-07 00:10:59"
  },
  {
    id: 6,
    title: "林业信息拉萨解放了书法家",
    status: "APPROVAL_PENDING",
    docAuthor: "zhangshan",
    submitTime: "2020-06-11 08:07:26"
  }
],
// 表格操作
tableOption: [
  {
    type: "selection",
    label: "#"
  },
  {
    prop: "title",
    label: "稿件名称",
    overHidden: true
  },
  {
    prop: "status",
    label: "稿件状态",
    sortable: true
  },
  {
    prop: "docAuthor",
    label: "作者"
  },
  {
    prop: "submitTime",
    label: "提交日期",
    sortable: true
  }
],
// 控制操作列是否显示
isOperate: true,

API属性

在这里插入图片描述

小结

对于elementUI表格的二次封装目前封到了这个程度,这样,如果其他界面有需要使用表格的,直接覆用子组件,然后传递表格数据就可以了,代码量会减少一大部分,而且对比起来也易于维护。


http://www.niftyadmin.cn/n/1659470.html

相关文章

9.字符串处理

1、字符串格式化 &#xff08;1&#xff09;整理字符串第一步是处理空格 <?php $str php ; echo $str; ?>由于php编辑器文本上的空格在网页上并不存在&#xff0c;所以在这里要清理空格 需要用到函数—— ltrim()——清理左边的空格 rtrim()——清理右边的空…

前端将后端返回的数字(英文字母),转成对应的文字进行显示

前言 类似于省市区&#xff0c;状态&#xff0c;性别之类的可以枚举出来的变量&#xff0c;一般情况下数据库中存储的是其对应的value值&#xff0c;像省市区联动的话&#xff0c;前端界面中显示的是省市区的名字&#xff0c;但是接口的入参一般是对应的code码&#xff1b;如果…

校园招聘——双选会感悟(前段学习总结)

今天&#xff0c;2016.12.01&#xff0c;是学校冬季校园招聘的一天&#xff0c;不得不说这是大学三年以来第一次参加这样的活动&#xff0c;而且还是发自内心自愿的&#xff0c;游荡了一圈&#xff0c;评价一下&#xff0c;仅仅是去打了个酱油&#xff0c;不过还是蛮有感触的&a…

Vue组件如何封装,这些原则您需要了解一下!

什么样的内容需要封装一段代码在项目中出现两次就开始考虑是否应该进行封装&#xff0c;出现三次就肯定要封装&#xff0c;大到一个页面&#xff0c;一个组件&#xff0c;小到一个function和一个css样式。 封装原则以下将封装出来的通用组件叫做子组件&#xff0c;引用通用组件…

ES5中新增的方法,让你的开发效率6的飞起

前言 ES5也被称为ECMAScript 5或ECMAScript 2009&#xff0c;在ES5中新增了许多方法&#xff0c;包括数组方法、字符串方法、对象方法等。今天我们主要来学习以下内容&#xff1a; 数组迭代方法&#xff1a;forEach()、map()、filter()、some()、every()字符串方法&#xff1…

JS创建对象的9种方式,你还在愁不知道如何创建对象吗?

什么是对象呢&#xff1f;ECMA-262中定义&#xff1a;对象是无序属性的集合&#xff0c;其属性值可以包含基本值、对象或者函数。 理解一下&#xff1a;对象是一组没有特定顺序的值。对象的每个属性或方法都有一个名字&#xff0c;而每个名字都映射到一个值。 知道什么是对象…

JS实现继承的7种方式,你都知道哪几种???

题记 ECMAScript只支持实现继承&#xff0c;而且其实现继承主要是依靠原型链来实现的。 继承的方式 方式一&#xff1a;原型链 关于原型链实现继承的方式我们在 你清楚JS的原型链吗 这里提到过&#xff0c;是通过让原型对象等于另一个类型的实例来实现继承的&#xff0c;但…

Vue 从零开始搭建PC端项目完整框架(附GitHub地址和Vue项目执行流程)

如何用Vue搭建一个PC端的项目呢&#xff1f;搭建完成都需要配置哪些内容呢&#xff1f;本篇文章会告诉你答案。 搭建项目的主要步骤如下&#xff1a; 1.根据脚手架创建一个项目 2.引入axios发送请求 3.配置拦截器&#xff08;注意http的error问题&#xff09; 4.引入组件库 5.如…