**
element-ui中的table表格进行分页查询时,会出现组件bug。
**
问题:
例如:在第一次查询后跳转到第四页,此时再进行新的条件查询,若该条件查询到的数据只有三页,查询时入参page: 4,即该页无数据,页面展示无数据。
解决方案:
- 错误方案:
在查询函数中,点击查询按钮时使page: 1,进行传参。
结果:进行问题复现操作,页面显示第一页数据,底部分页标签却停留在第四页。
仍然是有问题的。
- 正确解决方案:
进行问题复现操作时(再次进行查询时),依然传参page: 1,写回滚代码,判断该条件查询到的数据有多少页:
小于当前页(数量)则展示最后一页,底部分页标签却停留在最后一页。
大于当前页(数量)则展示当前页,底部分页标签却停留在当前页。
定义字段:
data() {
return {
loading: false,
queryForm: {},
tableData: [],
pagination: {
page: 1,
size: 10,
total: 0,
layout: 'total, sizes, prev, pager, next, jumper',
},
};
},
查询函数:
getPageData(request, params = {}) {
this.loading = true;
return new Promise((resolve, reject) => {
this.bindRequest(request, params);
const reqData = {
...this.queryForm,
...params,
size: this.pagination.size,
page: this.pagination.page,
};
_request(reqData).then((res) => {
console.log('分页数据', reqData, res.data);
if (res.data) {
this.pagination = {
...this.pagination,
size: res.data.size,
total: res.data.totalElements || res.data.total,
};
// 如果当前页查询不到数据,直接查询上一页的数据
if (res.data.totalPages > 0 && res.data.totalPages < this.pagination.page) {
this.pagination.page = res.data.totalPages;
this.getPageData();
}
this.tableData = res.data.content || res.data.list || res.data || [];
} else {
this.pagination = {
...this.pagination,
size: 10,
total: 0, // 总数
};
this.tableData = [];
}
this.loading = false;
resolve(res);
}).catch((e) => {
this.pagination = {
...this.pagination,
size: 10,
total: 0, // 总数
};
this.tableData = [];
this.loading = false;
reject(e);
});
});
},