摘要
我们在使用Ant Design Vue的Table表格时,经常需要使用其中的分页功能,通过设置pagination=“true”即可开启表格分页,但是我们还需要配置许多分页参数,因此对分页功能进行封装能很大程度提升开发效率。
封装
首先我们新建一个mixins文件夹,并在里面新建一个pagination.js文件作为封装分页功能的混入文件:
// 因为是后端分页,所以需要设定好后端分页参数,这里根据业务需求,默认为page、limit,分别代表查询页和每页数据数量参数,current、pageSize分别代表对于的值。
export default ({ serverCurrent = 'page', serverPageSize = 'limit', current = 1, pageSize = 10 } = {}) => ({
data () {
const change = (current, pageSize) => {
this.pagination.current = current
this.pagination.pageSize = pageSize
}
return {
pagination: {
total: 0,
current: current,
pageSize: pageSize,
showSizeChanger: true,
pageSizeOptions: ['10', '20', '50', '100'],
onShowSizeChange: (current, pageSize) => change(current, pageSize),
onChange: (current, pageSize) => change(current, pageSize),
// 分页参数重置方法,仅仅重置分页参数,不会重新加载表格
reset: () => {
this.pagination.current = current
this.pagination.pageSize = pageSize
}
}
}
},
computed: {
// 服务端查询参数
serverPagination () {
return {
[serverCurrent]: this.pagination.current, // 第几页
[serverPageSize]: this.pagination.pageSize // 每页中显示数据的条数
}
}
}
})
使用
<template>
//1. 在视图中直接引入pagination变量
<a-table
:pagination="pagination"
@change="handleTableChange"
>
</a-table>
</template>
// 2. 引入混入器
import paginationMix from '@mix/pagination.js';
export default {
// 3. 混入分页器,传入分页接口需要的参数,默认为page、limit
mixins: [ paginationMix({ serverCurrent: 'page', serverPageSize: 'limit' }) ],
created () {
this.getTableData()
},
methods: {
async getTableData () {
const { data: res } = await this.$http.get(
this.url, { params: this.serverPagination }
)
this.data = res.data.list
// 4. 网络获取数据时,将`total`值设置在`pagination`对象上即可
this.pagination.total = res.data.total
},
handleTableChange () {
this.getTableData()
}
}
}