一般情况下,获取表格数据时,我们会根据pageSize
(每页数据量)和pageIndex
(当前页数)进行查询,无论是pageSize
还是pageIndex
改变,我们都重新调接口获取数据,进行渲染。
但是,有些情况下,数据一次性全部给到前端,前端需要对数据进行过滤并渲染。
此次主要基于elment-ui
的分页进行举例,分页的基本思想是一致的。
依赖
element-ui
vue
代码
html
代码如下,有任何基础不明白可以看 element-ui中文网站1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25<div id="app">
<el-table
:data="tableData"
border
style="width: 50%;"
height="289">
<el-table-column
prop="id"
label="ID">
</el-table-column>
<el-table-column
prop="name"
label="用户名">
</el-table-column>
</el-table>
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="currentPage"
:page-sizes="[5,10,15,20]"
:page-size="pageSize"
layout="total,sizes,prev,pager,next,jumper"
:total="total">
</el-pagination>
</div>
js
主要针对pageSize
和currentPage
改变做数据过滤1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57new Vue({
el: '#app',
data () {
return {
// 当前页
currentPage: 1,
// 每页数据量
pageSize: 5,
// 数据总量
total: 60,
// 原始数据
originData: [],
// 渲染数据
tableData: []
}
},
created () {
// 模拟数据
for(let i = 0; i < 60; i++){
this.originData.push({
id: i,
name: 'user'+i
})
}
},
mounted () {
// 初始状态渲染
this.filterList(0,this.pageSize)
},
methods: {
// 改变每页条数
handleSizeChange (size) {
this.pageSize = size
// 每次改变每页条数后,都设置当前页为第一页
this.currentPage = 1
this.filterList(0,this.pageSize)
},
// 改变当前页
handleCurrentChange (current) {
// 设置当前页为选择的页数,element不会自动设置
this.currentPage = current
let start = (current - 1)* this.pageSize
let end = current * this.pageSize
this.filterList(start, end)
},
// 过滤数据,start为起始下标,end为结束下标,我们需要的数据是[start,end)
filterList (start, end) {
// 每次重新渲染时,要把数组置空
this.tableData = []
for (;start < end; start++){
if(this.originData[start]){
this.tableData.push(this.originData[start])
}
}
}
}
})