element-UI el-table二次封装
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二次封装的更多相关文章
- (Element UI 组件 Table)去除单元格底部的横线
Element UI 组件 Table 有一个属性 border,添加它可以增加纵向边框,但是无法控制横线边框,因此即使是最简单的 el-table,也会包含一个底部横线. 这个底部横线其实是一个 b ...
- element table 二次封装 父子组件传值 组件通信
新建一个组件(即子组件)table.vue 子组件编辑内容如下图所示 子组件通过props获取父组件传递过来的参数,如下图所示,type指明传递到子组件的数据类型,default指定默认值,一般不给 ...
- Element Ui中table实现表格编辑效果
主要以css实现 .tb-edit .el-input, .tb-edit .el-input-number, .tb-edit .el-select { display: none; width: ...
- Element UI的Table用法
Table 表格 用于展示多条结构类似的数据,可对数据进行排序.筛选.对比或其他自定义操作. ¶基础表格 基 2016-05-02 王小虎 上海市普陀区金沙江路 1518 弄 2016-05-04 王 ...
- element ui 合计/table show-summary
在el-table 上面加上show-summary就可以对table的数据进行合计 但是上次出现了合计栏有的为空,有的合计不对的情况,如果出现的是空,那么说明你渲染的数据有undefine(即后台返 ...
- element ui里面table分页,页数从0开始的怎么做?
需求: 后台请求的接口是从0页开始的,但是pagination是从1开始的,就是在点击pagination的第1页是后台转0 1首先在data里面定义为1,其他地方也是定义1 return { for ...
- 怎么样使element ui 的table某列变色
第一步.在el-table里面加上:row-style="rowClass" <el-table :data="targetCarList" border ...
- element ui的table的头部自定义
<el-table-column label="级别" min-width="120" prop="clueLevel" align= ...
- 封装一个优雅的element ui表格组件
现在做后台系统用vue + elementUI 的越来越多,那element ui的 el-table 组件肯定也离不开.虽然element ui的table组件很好.但是表格和分页是分离的.每次写表 ...
- 基于bootstrap table配置的二次封装
准备 jQuery js css 引用完毕 开始 如果对bootstrap table 的方法与事件不熟悉: Bootstrap table方法,Bootstrap table事件 <table ...
随机推荐
- 【转】WdatePicker.js的使用方法 帮助文档 使用说明 如何使用
[转]WdatePicker.js的使用方法 帮助文档 使用说明 如何使用 日期控件支持平面显示功能,只要设置一下eCont属性就可以把它当作日历来使用了,无需触发条件,直接显示在页面上 示例2-1 ...
- HTML与JSP页面的区别
HTML(Hypertext Markup Language)文本标记语言,它是静态页面,和JavaScript一样解释性语言,为什么说是解释性 语言呢?因为,只要你有一个浏览器那么它就可以正常显示出 ...
- [原创]java读写word文档,完美解决方案
做项目的过程中,经常需要把数据里里的数据读出来,经过加工,以word格式输出. 在网上找了很多解决方案都不太理想,偶尔发现了PageOffice,一个国产的Office插件,开发调用非常简单!比网上介 ...
- C++ 多线程与并发
1. 非原子操作 这些非原子操作在被编译为汇编代码后不止一条指令. 自加.自减少: new 关键字: 申请内存: 调用构造函数: pInst = new T; // 对于这样一个赋值语句,更是包含了如 ...
- 并不对劲的bzoj3932: [CQOI2015]任务查询系统
传送门-> 离线操作听上去很简单,遗憾的是它强制在线. 每个时刻可以看成可持久化线段树中的一个版本,而每一个版本的线段树维护的是值某一段区间且在这个版本对应的时刻出现的数之和. 会发现同一时刻可 ...
- bootstrap 表单元素、按钮、链接的禁用
在Bootstra中,表单元素,按钮通过在标签内设置 disabled 或 disabled="disabled" 可以禁用表单元素,按钮.链接需要加入class="di ...
- arcgis for silverlight 相关学习资料整理
Arcgis Resources:http://resources.arcgis.com/en/home/ esri中文官方论坛:http://www.gisall.com/portal.php 爱吃 ...
- Spring Boot:关于“No converter found for return value of type: class xxx”的解决方法
首先在对应的controller中的@RestController中返回json对象的操作 public class HelloController { @RequestMapping("/ ...
- VS 2017 产品密钥
Visual Studio 2017(VS2017) 企业版 Enterprise 注册码:NJVYC-BMHX2-G77MM-4XJMR-6Q8QFVisual Studio 2017(VS2017 ...
- python之logging模块简单用法
前言: python引入logging模块,用来记录自己想要的信息.print也可以输入日志,但是logging相对print来说更好控制输出在哪个地方.怎么输出以及控制消息级别来过滤掉那些不需要的信 ...