vue项目封装elementUI的el-table列表

5 篇文章 0 订阅
2 篇文章 0 订阅

基于vue/cli3.0+脚手架搭建Vue项目(16)



前言

这一秒才是最年轻的自己


一、封装el-table目的

在整个系统里,使用统一的table列表规则和样式,进行规范,方便页面开发

二、封装el-table公共组件的代码编写

<template>
    <div>
        <el-table
            :data="tableBody"
            style="width: 100%">
            <el-table-column type="selection"></el-table-column>
            <template v-for="(item,index) in tableHeader">
                <el-table-column
                    :prop="item.prop"
                    :label="item.label"
                    :key="index">
                    <template v-slot="scope" v-if="item.propKey">
                        <slot :name="item.propKey" v-bind:scope="scope.row" v-bind:scopeIndex="scope.$index"></slot>
                    </template>
                    <template v-slot:header>
                        <span @click='handleSort(item)' :class='{"set-hover":item.sort}'>
                            {{item.label}}
                        </span>
                        <span class='sort-view' v-if='item.sort' @click='handleSort(item)'>
                            <span class='el-icon-caret-top' :class='(sortActive == "asc"&&sortName==item.prop) ? "headerSortActive" : "resetActive"'  ></span>
                            <span class='el-icon-caret-bottom' :class='(sortActive == "desc"&&sortName==item.prop) ? "headerSortActive" : "resetActive"'></span>
                        </span>
                        <slot :name="item.prop" v-bind:scope="item" ></slot>
                    </template>
                </el-table-column>
            </template>
        </el-table>
        <slot></slot>
    </div>
</template>
  <script>
    export default {
        props: {
            tableData: {
                type: Object,
                default: {
                    tableHeader: [],
                    tableData: []
                }
            }
        },
      data() {
        return {
          sortActive:'', //desc, asc, ''
          sortName: ''  ,  //用来判断排序的激活状态的变量
        }
      },
      created() {
          this.tableHeader =this.tableData.tableHeader
          this.tableBody =this.tableData.tableData
      },
      methods: {
          handleSort(item) {
              this.sortName =item.prop
              this.sortActive = this.sortActive ? (this.sortActive ==='desc' ? 'asc' :'') :'desc'
              this.$emit('sortBy', item, this.sortActive)
          },
      }
    }
  </script>
  <style lang="scss" scoped>
    .set-hover:hover {
        cursor:pointer;
    }
    .sort-view{
        display: inline-block;
        vertical-align: middle;
        padding-left: 0px;
        cursor: pointer;
        height: 20px;
    }
    .sort-view span{
        display: block;
        width: 20px;
        height: 10px;
        line-height: 10px;
        text-align: center;
        color: #999;
        font-size: 12px;
        transform: scale(0.9);
        margin-bottom: -3px;
        padding-left: 0px!important;
    }
    .sort-view span:hover{
        cursor: pointer;
        color:#415fff;
    }
    .headerSortActive{
        color:#415fff !important; 
    }
    .resetActive{
        color:#999 !important;
    }
  </style>

后续可以再根据自己的需要,来丰富组件的内容

三、页面验证

<template>
  <div class="personnel">
    <div class="table">
      <common-table :table-data="personnelData" @sortBy="sortBy">
        <template slot="addressKey" slot-scope="{ scope }">
          <el-input v-model="scope.address" :placeholder="'请输入'" />
        </template>
      </common-table>
    </div>
  </div>
</template>
<script>
import commonTable from '@/components/achive-table';
export default {
  components: {
    commonTable,
  },
  data() {
    return {
      tableHeader: [
        {
          prop: 'date',
          label: '日期',
          sort: 'true',
        },
        {
          prop: 'name',
          label: '姓名',
        },
        {
          prop: 'address',
          propKey: 'addressKey',
          label: '地址',
        },
      ],
      tableData: [
        {
          date: '2021',
          name: '小明',
          address: '',
        },
        {
          date: '2022',
          name: '小花',
          address: '',
        },
      ],
    };
  },
  computed: {
    personnelData() {
      return {
        tableHeader: this.tableHeader,
        tableData: this.tableData,
      };
    },
  },
  methods: {
    sortBy(item, sortType) {
      console.log(item, sortType);
    },
  },
};
</script>
<style lang="scss" scoped>
.personnel {
  padding: 16px;
}
</style>

在这里插入图片描述


总结

做好现在,勿惧将来。

### 回答1: Vue3中封装el-table可以通过以下步骤进行: 1. 首先,我们需要创建一个自定义组件,可以命名为MyTable。 2. 在MyTable组件中,我们需要导入el-tableel-table-column组件,可以使用import语句进行导入。 3. 在template标签中,我们可以使用el-table来渲染表格。可以设置属性如:data、border、stripe等。 4. 在el-table标签内部,我们可以使用el-table-column来定义表格的列。可以设置属性如:prop(对应数据源)、label(列名)、width(列宽)等。 5. 在script标签中,我们需要定义MyTable组件的props,用于接收父组件传递的数据。 6. 在script标签中,我们可以定义一些方法或者计算属性,用于处理表格的点击事件、排序、筛选等。 7. 最后,我们需要在父组件中使用MyTable组件,并传递数据和配置选项给MyTable组件的props,来渲染自定义的表格。 总结一下,Vue3中封装el-table的关键步骤包括创建自定义组件、导入el-tableel-table-column组件、在MyTable组件中使用el-tableel-table-column来渲染表格、定义props、定义方法和计算属性以及在父组件中使用MyTable组件。通过封装el-table,我们可以更好地复用和管理表格组件,并实现更灵活的表格功能。 ### 回答2: Vue3是一个用于构建用户界面的渐进式JavaScript框架。它具有轻量级、高效、易用的特点,并且在Vue3中可以灵活地封装el-table。 首先,为了封装el-table,我们可以创建一个自定义组件,命名为TableWrapper。在TableWrapper组件的模板中使用el-table,并将el-table的相关属性、事件和插槽通过props进行传递和接收。 在TableWrapper组件的props中,我们可以定义例如data、columns、pagination等与el-table相关的属性。这样,我们就可以通过在使用TableWrapper组件时传递这些属性来配置el-table的行为。 另外,我们还可以在TableWrapper组件中定义一些需要自定义的功能,例如表格的样式、表头的固定、排序功能等。这些功能可以通过在TableWrapper组件中添加相关的方法和事件来实现。 除了属性和方法外,我们还可以使用插槽在TableWrapper组件中自定义表格的各个部分,例如表头、表尾、表格内容等。通过在TableWrapper组件的模板中使用<slot>元素,并在使用TableWrapper组件时传递相应的内容,可以方便地自定义el-table的外观和布局。 总之,通过将el-table封装到自定义组件TableWrapper中,我们可以更好地控制和定制el-table的行为和外观。这样,我们就能够根据实际需要快速构建出符合需求的数据表格。 ### 回答3: Vue3中封装el-table的步骤如下: 1. 首先,创建一个名为el-table-wrapper的组件,该组件用于封装el-table。 2. 在el-table-wrapper组件中,引入el-table组件,并在模板中使用el-table进行数据展示。 3. 在el-table-wrapper组件中,接收名为data的props属性,用于传递表格数据。 4. 在el-table-wrapper组件中,通过v-for指令遍历data数据,并使用el-table-column组件进行表格列的定义。 5. 在el-table-wrapper组件中,使用slot插槽来支持自定义表格内容,例如添加操作按钮等。 6. 在el-table-wrapper组件中,可以设置一些其他属性,如border、stripe等,以适应不同的需求。 7. 在el-table-wrapper组件中,可以使用事件监听器来捕获el-table的一些事件,例如选择行、排序等。 8. 在el-table-wrapper组件中,通过emit方法触发自定义事件,以便在父组件中处理表格的交互逻辑。 总结:在Vue3中封装el-table,需要通过创建一个包装组件,在其中引入el-table组件并定义相应的列和属性,同时支持自定义内容和事件。这样可以提高代码的复用性和可维护性,方便在不同的项目中使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这世界反了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值