在vue和element-ui的table中實現(xiàn)分頁復(fù)選功能
背景
后臺管理系統(tǒng)中,使用表格展示數(shù)據(jù)時,可能的需求是多項選擇然后進行批量操作,也期望能翻頁多選。
實現(xiàn)
頁面結(jié)構(gòu)如下
<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>
模擬數(shù)據(jù)實現(xiàn)分頁
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: [],
在復(fù)選事件中對所選項進行存儲
主要思路就是:
- 將當(dāng)前頁已選數(shù)據(jù)放入所有已選項
- 將所有已選項數(shù)據(jù)中當(dāng)前頁沒選擇的項移除
handleSelectionChange (val) {
this.multipleSelection = val
// @tip 實現(xiàn)分頁復(fù)選
console.log(val, 'selection')
setTimeout(_ => {
this.resolveAllSelection()
}, 50)
},
resolveAllSelection () {
let currentPageData = this.tableData.map(item => item[this.uniqueKey]) // 當(dāng)前頁所有數(shù)據(jù)
let currentPageSelected = this.multipleSelection.map(item => item[this.uniqueKey]) // 當(dāng)前頁已選數(shù)據(jù)
let currentPageNotSelected = currentPageData.filter(item => !currentPageSelected.includes(item)) // 當(dāng)前頁未選數(shù)據(jù)
// 將當(dāng)前頁已選數(shù)據(jù)放入所有已選項
currentPageSelected.forEach(item => {
if (!this.allMultipleSelection.includes(item)) {
this.allMultipleSelection.push(item)
}
})
// 將所有已選項數(shù)據(jù)中當(dāng)前頁沒選擇的項移除
currentPageNotSelected.forEach(item => {
let idx = this.allMultipleSelection.indexOf(item)
if (idx > -1) {
this.allMultipleSelection.splice(idx, 1)
}
})
console.log(this.allMultipleSelection, 'all')
},
此時還需要在切換頁面時將之間選擇項進行重新選中,即遍歷當(dāng)前頁所有數(shù)據(jù)如果存在于所有已選項中,則將其置為已選擇。
fetchData () {
// ...
setTimeout(_ => {
// ...
// @tip 實現(xiàn)分頁復(fù)選
setTimeout(_ => {
this.setSelectedRow()
}, 50)
}, 200)
},
setSelectedRow () {
// 設(shè)置當(dāng)前頁已選項
this.tableData.forEach(item => {
if (this.allMultipleSelection.includes(item[this.uniqueKey])) {
this.$refs.asTable.toggleRowSelection(item, true)
console.log(item[this.uniqueKey], 'set')
}
})
},
以上實現(xiàn)了分頁復(fù)選功能。
所有代碼存放在 @careteen/lan-vue
查看DEMO
clone倉庫并引入依賴
git clone git@github.com:careteenL/lan-vue.git npm install npm run serve
瀏覽器打開 http://localhost:8080/#/examples/pagingCheck 即可看到效果
總結(jié)
以上所述是小編給大家介紹的在vue和element-ui的table中實現(xiàn)分頁復(fù)選功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
- Vue使用Element-UI實現(xiàn)分頁效果全過程
- 利用Vue模擬實現(xiàn)element-ui的分頁器效果
- vue+Element-ui前端實現(xiàn)分頁效果
- vue+Element-ui實現(xiàn)分頁效果
- vue + element-ui的分頁問題實現(xiàn)
- vue+Element-ui實現(xiàn)分頁效果實例代碼詳解
- vue 基于element-ui 分頁組件封裝的實例代碼
- Vue+element-ui 實現(xiàn)表格的分頁功能示例
- 利用vue和element-ui設(shè)置表格內(nèi)容分頁的實例
- vue如何使用element-ui 實現(xiàn)自定義分頁
相關(guān)文章
Vue?elementui如何實現(xiàn)表格selection的默認(rèn)勾選
這篇文章主要介紹了Vue?elementui如何實現(xiàn)表格selection的默認(rèn)勾選問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06
vue3中reactive數(shù)據(jù)被重新賦值后無法雙向綁定的解決
這篇文章主要介紹了vue3中reactive數(shù)據(jù)被重新賦值后無法雙向綁定的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-05-05
html+vue.js 實現(xiàn)漂亮分頁功能可兼容IE
功能比較簡單,在單一html中使用vue.js分頁展示數(shù)據(jù),并未安裝腳手架,或使用相關(guān)UI框架,此時需要手寫一個分頁器,不失為最合理最便捷的解決方案,需要的朋友可以參考下2020-11-11
Vue引入highCharts實現(xiàn)數(shù)據(jù)可視化
這篇文章主要為大家詳細介紹了Vue引入highCharts實現(xiàn)數(shù)據(jù)可視化,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03
Vue使用NProgress實現(xiàn)頁面頂部的進度條顯示效果
這篇文章主要介紹了vue Nprogress頁面頂部進度條功能實現(xiàn),NProgress是頁面跳轉(zhuǎn)是出現(xiàn)在瀏覽器頂部的進度條,本文通過實例代碼給大家講解,需要的朋友可以參考下2022-12-12
vue中v-for數(shù)據(jù)狀態(tài)值變了,但是視圖沒改變的解決方案
這篇文章主要介紹了vue中v-for數(shù)據(jù)狀態(tài)值變了,但是視圖沒改變的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06
關(guān)于vue項目一直出現(xiàn) sockjs-node/info?t=XX的解決辦法
sockjs-node 是一個JavaScript庫,提供跨瀏覽器JavaScript的API,創(chuàng)建了一個低延遲、全雙工的瀏覽器和web服務(wù)器之間通信通道,這篇文章主要介紹了vue項目一直出現(xiàn) sockjs-node/info?t=XX的解決辦法,需要的朋友可以參考下2023-12-12

