Part.1 为什么要二次封装?

这是 Element 网站的 table 示例:

  <template>
<el-table :data="tableData" style="width: 100%">
<el-table-column prop="date" label="日期" width="180"></el-table-column>
<el-table-column prop="name" label="姓名" width="180"></el-table-column>
<el-table-column prop="address" label="地址"></el-table-column>
</el-table>
</template> <script>
export default {
data() {
return {
tableData: [{
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>

上面的表格字段较少,代码数量不多,但是当我们在开发项目的时候,可能表格字段很多并且多处用到表格,那我们的代码量就会非常多而且冗杂,所以我们需要进行二次封装,从而精简代码量

Part.2 遇到的问题

按照暂时项目所需进行的二次封装,遇到的问题如下:

1. 为表格添加序号列时,翻页操作发现每一页的序号都是从1开始

2. 操作列如何封装/需要给某一个列自定义怎么办?

Part.3 解决

问题一 可参考:https://www.cnblogs.com/langxiyu/p/10641060.html

问题二 关于操作列/自定义列我使用了 slot  , 具体实现如下:

封装:

<template>
<div class="data-table">
<el-table
:data="tableData"
style="width: 100%"
border
v-loading="loading">
<el-table-column
label="序号"
type="index"
width="50"
align="center">
<template scope="scope">
<!-- 有分页时,序号显示 -->
<span v-if="pageObj">{{(pageObj.currentPage - 1)*pageObj.size + scope.$index + 1}}</span>
<!-- 无分页时,序号显示 -->
<span v-else>{{scope.$index + 1}}</span>
</template>
</el-table-column>
<template v-for="(col, index) in columns">
<!-- 操作列/自定义列 -->
<slot v-if="col.slot" :name="col.slot"></slot>
<!-- 普通列 -->
<el-table-column v-else
:key="index"
:prop="col.prop"
:label="col.label"
:width="col.width"
:formatter="col.formatter"
align="center">
</el-table-column>
</template>
</el-table>
<!-- 是否调用分页 -->
<el-pagination v-if="pageObj" background
layout="total, prev, pager, next, jumper"
:page-size="pageObj.size"
:total="pageObj.total"
:current-page="pageObj.currentPage"
@current-change="pageObj.func">
</el-pagination>
</div>
</template> <script>
export default {
name: "dataTable",
props: ['tableData', 'columns', 'loading', 'pageObj']
}
</script>

调用:

HTML

       <lxy-table :tableData="tableData" :columns="columns" :loading="loading" :pageObj="pageObj">
<el-table-column slot="operate" label="操作" align="center" fixed="right" width="300">
<template slot-scope="scope">
<el-button size="small" type="warning"
icon='el-icon-edit'
@click="edit(scope.row)">编辑
</el-button>
<el-button size="small" type="primary"
icon='el-icon-success'
@click="startUsing(scope.row)">启用
</el-button>
</template>
</el-table-column>
</lxy-table>

JS

 tableData:[],
columns: [
{label: '名称', prop: 'adName'},
{label: '链接', prop: 'adUrl'},
{label: '排序', prop: 'sort'},
{slot: 'operate'}], // 操作列
loading: true,
pageObj: {
size: 10,
total: 1,
currentPage: 1,
func:(currentPage) =>{
this.pageTurning(currentPage)
}
},

二次封装解决,这样执行每个需要调用表格的地方代码可操作性更强,代码更加清晰明了!当然更多表格功能可自行再次添加~~~

element-UI el-table二次封装的更多相关文章

  1. (Element UI 组件 Table)去除单元格底部的横线

    Element UI 组件 Table 有一个属性 border,添加它可以增加纵向边框,但是无法控制横线边框,因此即使是最简单的 el-table,也会包含一个底部横线. 这个底部横线其实是一个 b ...

  2. element table 二次封装 父子组件传值 组件通信

    新建一个组件(即子组件)table.vue 子组件编辑内容如下图所示 子组件通过props获取父组件传递过来的参数,如下图所示,type指明传递到子组件的数据类型,default指定默认值,一般不给 ...

  3. Element Ui中table实现表格编辑效果

    主要以css实现 .tb-edit .el-input, .tb-edit .el-input-number, .tb-edit .el-select { display: none; width: ...

  4. Element UI的Table用法

    Table 表格 用于展示多条结构类似的数据,可对数据进行排序.筛选.对比或其他自定义操作. ¶基础表格 基 2016-05-02 王小虎 上海市普陀区金沙江路 1518 弄 2016-05-04 王 ...

  5. element ui 合计/table show-summary

    在el-table 上面加上show-summary就可以对table的数据进行合计 但是上次出现了合计栏有的为空,有的合计不对的情况,如果出现的是空,那么说明你渲染的数据有undefine(即后台返 ...

  6. element ui里面table分页,页数从0开始的怎么做?

    需求: 后台请求的接口是从0页开始的,但是pagination是从1开始的,就是在点击pagination的第1页是后台转0 1首先在data里面定义为1,其他地方也是定义1 return { for ...

  7. 怎么样使element ui 的table某列变色

    第一步.在el-table里面加上:row-style="rowClass" <el-table :data="targetCarList" border ...

  8. element ui的table的头部自定义

    <el-table-column label="级别" min-width="120" prop="clueLevel" align= ...

  9. 封装一个优雅的element ui表格组件

    现在做后台系统用vue + elementUI 的越来越多,那element ui的 el-table 组件肯定也离不开.虽然element ui的table组件很好.但是表格和分页是分离的.每次写表 ...

  10. 基于bootstrap table配置的二次封装

    准备 jQuery js css 引用完毕 开始 如果对bootstrap table 的方法与事件不熟悉: Bootstrap table方法,Bootstrap table事件 <table ...

随机推荐

  1. HTML5、javascript写的craps游戏

    1. [代码][HTML]代码   <!DOCTYPE HTML><html><head><meta charset="utf-8"> ...

  2. wpa_supplicant drivers 查看跟踪

    /**************************************************************************** * wpa_supplicant drive ...

  3. bzoj1426 (洛谷P4550) 收集邮票——期望

    题目:https://www.luogu.org/problemnew/show/P4550 推式子……:https://blog.csdn.net/pygbingshen/article/detai ...

  4. OC:基础总结

    OC面向对象的编程语言思想 类与对象.继承与实例化.属性点语法.内存管理.字符串.可见度. 类是一组具有相同特征和行为的事物的抽象 OC的与C相比所具有的新的特点: 定义新的类.类的实例和方法.方法的 ...

  5. maven项目没有错,但是在项目头上有红叉的解决方法

    转自:https://blog.csdn.net/myblog_dhy/article/details/41695107 我在使用maven的过程中,要导入某个maven项目,导入的过程中会弹出一个框 ...

  6. 【182】SeaDAS 相关处理

    load:Command mode procedure for reading data and data attributes into memory and making it available ...

  7. Android中string.xml中的的标签xliff:g(转载)

    转自:http://blog.csdn.net/xuewater/article/details/25687987 在资源文件中写字符串时,如果这个字符串时动态的,又不确定的值在里面,我们就可以用xl ...

  8. StretchedBillboard 实现

    参考Unity粒子系统的StretchedBillboard,在保持模型的右朝向不变的情况下,尽量朝向摄像机 转化为数学问题: 一个向量在一个面上的投影 基础的Billboard的方向应为: 从中点指 ...

  9. selenium3 + python - js 内嵌滚动处理

    一.js内嵌html <!DOCTYPE html><html lang="en"><head> <meta charset=" ...

  10. spring源代码下载并导入eclipse技巧

    环境:mac 安装brew /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install ...