封装一个优雅的element ui表格组件
现在做后台系统用vue + elementUI 的越来越多,那element ui的 el-table 组件肯定也离不开。虽然element ui的table组件很好。但是表格和分页是分离的。每次写表格的时候都要写分页。这个就比较麻烦了。那我们可不可以把表格和分页封装在一起呢?照这个思路那我们重新封装一个带分页的表格。
思路:
- 表格组件要包含分页,不用每次都重新写分页
- 尽量保证el-table原生方法
- 方便易用
照这个思路我们开始写代码
先把表格和分页写在一起
<template>
<div>
<!-- 表格数据 -->
<el-table
highlight-current-row //点击当前行高亮
:data="tableDate" //表格数据
border //添加斑马线
:height="tableHeight" //表格高度
v-loading="loading" //loading动画
:size="size" //表格大小
@sort-change = "sortChange" //排序
@selection-change="selectionChange" //多选
@current-change="currentChange"
@row-click = "rowClick" //单行点击
style="width: 100%">
<slot></slot>
</el-table>
<el-pagination
v-if="paging"
@size-change="limitChange"
@current-change="pageChange"
:current-page.sync="params.page"
:page-size="params.limit"
:page-sizes="[10, 15, 20, 30, 50]"
layout="total, sizes, prev, pager, next, jumper"
:total="tableCount">
</el-pagination>
</div>
</template>
<script>
export default {
props: {
//请求接口
api: {
required: true
},
//参数 默认返回分页和条数
params: {
type: [Object,String,Number],
default: function() {
return { page: 1, limit: 15 };
}
},
// 尺寸
size: {
default: 'small'
},
// 分页
paging: {
default: true
}
},
data() {
return {
tableCount: 0, //总条数
tableDate: [], //表格数据
loading: false, //loading动画
};
},
created() {
this.init(this.params);
},
computed: {
// 实时更新server
server:function(){
return this.api.split('.')[0]
},
// 实时更新url
url:function(){
return this.api.split('.')[1]
},
tableHeight:function(){
return this.paging?'calc(100% - 32px)':'100%'
}
},
methods: {
init(params) {
this.loading = true;
//如果采用微服务的方式需要传微服务和url
this.$api[this.server][this.url](params)
.then(res => {
this.tableDate = res.data || [];
// 如果有分页
if(this.paging){
this.tableCount = res.count || 0;
this.params.page = res.curr || 0;
}
})
.finally(() => {
//关闭loading
this.loading = false;
});
},
// 重新请求 //如果需要重新请求使用$refs 调用这个方法
reload() {
// 如果有分页
if(this.paging){
this.params.page = 1;
}
// api动态加载完 开始重新请求数据
this.$nextTick(()=>{
this.init(this.params);
})
},
以下是对el-table原来的方法再次封装emit出去
// 多选
selectionChange(val){
this.$emit('selection-change',val)
},
// 单选
currentChange(currentRow, oldCurrentRow){
this.$emit('current-change',currentRow, oldCurrentRow)
},
rowClick(row, event, column){
this.$emit('row-click',row, event, column)
},
// 排序
sortChange(column, prop, order){
this.$emit('sort-change',column, prop, order)
},
// 表格翻页
pageChange(page) {
this.params.page = page;
this.init(this.params);
},
limitChange(limit){
this.params.limit = limit;
this.init(this.params);
},
}
};
</script>
别人使用起来非常简单 ,也不用再写任何请求方法
可以全局引入
<d-table
api="bizSystemService.getEmployeeList" //微服务名称+接口名称
:params="queryForm" //接口请求的参数. 默认是limit和page
ref="table"
size="small">
//下面的使用方式和el-table一样
<el-table-column
align="center"
label="序号"
width="50">
<template slot-scope="scope">
{{scope.$index+1}}
</template>
</el-table-column>
<el-table-column
prop="roleTypeName"
align="center"
label="角色类型"
width="120">
<template slot-scope="scope">
<el-button @click="handleClick(scope.row)" type="text" size="small">查看</el-button>
<el-button type="text" size="small">编辑</el-button>
</template>
</d-table-column>
</el-table>
如果想刷新数据 使用reload方法即可. this.$refs.table.reload()
原文地址:https://segmentfault.com/a/1190000017346342
封装一个优雅的element ui表格组件的更多相关文章
- Element UI表格组件技巧:如何简洁实现跨页勾选、跨页统计功能
业务场景 在使用Element UI的Table组件时,常常面对这样的业务需求: 表格数据的每一项都要提供勾选框,当切换分页时,能够记忆所有页面勾选的数据,以实现批量提交不同页面勾选数据的功能.并且, ...
- [转]vue Element UI走马灯组件重写
https://blog.csdn.net/u013750989/article/details/82885482 1.element ui走马灯组件 -- carousel分析一波源代码:carou ...
- element ui 表格提交时获取所有选中的checkbox的数据
<el-table ref="multipleTable" :data="appList" @selection-change="changeF ...
- vue2.0+Element UI 表格前端分页和后端分页
之前写过一篇博客,当时对element ui框架还不太了解,分页组件用 html + css 自己写的,比较麻烦,而且只提到了后端分页 (见 https://www.cnblogs.com/zdd20 ...
- 如何优雅的设置UI库组件的属性?
UI库提供了很多组件,组件又带有很多属性,有一些常用属性我们可以记住并且手撸,但是有些不常用的属性,或者需要设置多个属性,这样的情况下写起来就麻烦了,有时候还要打开帮助文档看看属性是怎么设定的,需要设 ...
- vue + element ui 表格自定义表头,提供线上demo
前言:工作中用到 vue+element ui 的前端框架,需要使用自定义表头,需要使用 re.转载请注明出处:https://www.cnblogs.com/yuxiaole/p/9710826.h ...
- element ui step组件在另一侧加时间轴显示
这是我开发的时候遇到的一个问题:项目需要在步骤条(竖直方向)的另一侧加时间显示,但是我在element ui 的step组件中一直没找着设置方法,所以就自己想了个办法加进来,效果如下: 代码如下,先上 ...
- Element UI table组件源码分析
本文章从如下图所示的最基本的table入手,分析table组件源代码.本人已经对table组件原来的源码进行削减,源码点击这里下载.本文只对重要的代码片段进行讲解,推荐下载代码把项目运行起来,跟着文章 ...
- vue+element UI以组件递归方式实现多级导航菜单
介绍 这是一个是基于element-UI的导航菜单组件基础上,进行了二次封装的菜单组件,该组件以组件递归的方式,实现了可根据从后端接收到的json菜单数据,动态渲染多级菜单的功能. 使用方法 由于该组 ...
随机推荐
- (转载)Python中模块的发布与安装
模块(Module) Python中有一个概念叫做模块(module),这个和C语言中的头文件以及Java中的包很类似,比如在Python中要调用sqrt函数,必须用import关键字引入math这个 ...
- 洛谷 P1969 积木大赛
题目描述 春春幼儿园举办了一年一度的“积木大赛”.今年比赛的内容是搭建一座宽度为n的大厦,大厦可以看成由n块宽度为1的积木组成,第i块积木的最终高度需要是hi. 在搭建开始之前,没有任何积木(可以看成 ...
- 电脑Bois中usb模式启动热键
组装机主板 品牌笔记本 品牌台式机 主板品牌 启动按键 笔记本品牌 启动按键 台式机品牌 启动按键 华硕主板 F8 联想笔记本 F12 联想台式机 F12 技嘉主板 F12 宏基笔记本 F12 惠普台 ...
- feign容断忽略某些异常
@HystrixCommand(ignoreExceptions={ BusinessException.class, IllegalArgumentException.class, BadCrede ...
- 邮箱/邮件地址的正则表达式及分析(JavaScript,email,regex)
简言 在做用户注册时,常会用到邮箱/邮件地址的正则表达式.本文列举了几种方案,大家可以根据自己的项目情况,选择最适合的方案. 方案1 (常用) 规则定义如下: 以大写字母[A-Z].小写字母[a-z] ...
- Kendo MVVM 数据绑定(一) attr
Kendo MVVM 数据绑定(一) attr Kendo UI MVVM 数据绑定支持的绑定属性有 attr, checked, click, custom , disabled,enabled, ...
- Kendo MVVM (二) ObservableObject 对象
概述 Kendo MVVM 框架关键的一个部分为 ViewModel,它主要是通过 kendo.data.ObserableObject 来提供支持的.它可以监控改变( UI 变化或是值的变化)并通知 ...
- java 实现 excel sheet 拷贝到另一个Excel文件中 poi
public class CopyExcelSheetToAnotherExcelSheet { public static void main(String[] args) throws FileN ...
- Object类-try-catch-finally-throw-throws-自定义异常
一.Object类 Object类是最顶端的类,其它类都是它的子类,它的方法可以被继承.如果定义的类没有继承别的类,那它的直接父类就是Object.如果方法参数类型为object类型, 则调用 ...
- Linux:linux下建ftp用户,并限制用户访问路径
安装:ftp安装部分,操作步骤如下: 可以使用yum命令直接安装ftp # yum install vsftpd ftp服务的开启与关闭命令: 开启:# service vsftpd start 关闭 ...