在vue和element-ui的table中实现分页复选功能
程序员文章站
2022-07-04 16:59:08
背景
后台管理系统中,使用表格展示数据时,可能的需求是多项选择然后进行批量操作,也期望能翻页多选。
实现
页面结构如下
背景
后台管理系统中,使用表格展示数据时,可能的需求是多项选择然后进行批量操作,也期望能翻页多选。
实现
页面结构如下
<el-table class="table" :data="tabledata" border style="width: 100%" @selection-change="handleselectionchange" ref="astable" > <el-table-column width="50" type="selection" fixed="left" > </el-table-column> <el-table-column prop="id" label="id" > </el-table-column> <el-table-column prop="name" label="名字" > </el-table-column> <el-table-column label="操作" width="100" > <template slot-scope="scope"> <el-button type="primary" plain size="small" @click="handleedit(scope.row)" >编辑</el-button> </template> </el-table-column> </el-table> <el-pagination background @current-change="handlecurrentchange" :current-page.sync="pagination.currentpage" :page-size="pagination.size" layout="total, prev, pager, next, jumper" :total="pagination.total" slot="pagination" > </el-pagination>
模拟数据实现分页
data () { return { tabledata: [], multipleselection: [], pagination: { currentpage: 1, size: 10, total: 1000 } } }, beforemount () { this.fetchdata() }, methods: { fetchdata () { this.tabledata = [] let start = (this.pagination.currentpage - 1) * this.pagination.size let end = this.pagination.currentpage * this.pagination.size settimeout(_ => { for (let i = start; i < end; i++) { this.tabledata.push({ id: i, name: `王${i}兰` }) } } }, handlecurrentchange () { this.fetchdata() }, handleselectionchange (val) { this.multipleselection = val }, }
展示已选择项
<div class="result"> 已选:{{ allmultipleselection }} </div> allmultipleselection: [],
在复选事件中对所选项进行存储
主要思路就是:
- 将当前页已选数据放入所有已选项
- 将所有已选项数据中当前页没选择的项移除
handleselectionchange (val) { this.multipleselection = val // @tip 实现分页复选 console.log(val, 'selection') settimeout(_ => { this.resolveallselection() }, 50) }, resolveallselection () { let currentpagedata = this.tabledata.map(item => item[this.uniquekey]) // 当前页所有数据 let currentpageselected = this.multipleselection.map(item => item[this.uniquekey]) // 当前页已选数据 let currentpagenotselected = currentpagedata.filter(item => !currentpageselected.includes(item)) // 当前页未选数据 // 将当前页已选数据放入所有已选项 currentpageselected.foreach(item => { if (!this.allmultipleselection.includes(item)) { this.allmultipleselection.push(item) } }) // 将所有已选项数据中当前页没选择的项移除 currentpagenotselected.foreach(item => { let idx = this.allmultipleselection.indexof(item) if (idx > -1) { this.allmultipleselection.splice(idx, 1) } }) console.log(this.allmultipleselection, 'all') },
此时还需要在切换页面时将之间选择项进行重新选中,即遍历当前页所有数据如果存在于所有已选项中,则将其置为已选择。
fetchdata () { // ... settimeout(_ => { // ... // @tip 实现分页复选 settimeout(_ => { this.setselectedrow() }, 50) }, 200) }, setselectedrow () { // 设置当前页已选项 this.tabledata.foreach(item => { if (this.allmultipleselection.includes(item[this.uniquekey])) { this.$refs.astable.togglerowselection(item, true) console.log(item[this.uniquekey], 'set') } }) },
以上实现了分页复选功能。
所有代码存放在 @careteen/lan-vue
查看demo
clone仓库并引入依赖
git clone git@github.com:careteenl/lan-vue.git npm install npm run serve
浏览器打开 http://localhost:8080/#/examples/pagingcheck 即可看到效果
总结
以上所述是小编给大家介绍的在vue和element-ui的table中实现分页复选功能,希望对大家有所帮助