摘要 我们在使用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() } } }