在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ù)選事件中對所選項進行存儲
主要思路就是:
- 將當前頁已選數(shù)據(jù)放入所有已選項
- 將所有已選項數(shù)據(jù)中當前頁沒選擇的項移除
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]) // 當前頁所有數(shù)據(jù) let currentPageSelected = this.multipleSelection.map(item => item[this.uniqueKey]) // 當前頁已選數(shù)據(jù) let currentPageNotSelected = currentPageData.filter(item => !currentPageSelected.includes(item)) // 當前頁未選數(shù)據(jù) // 將當前頁已選數(shù)據(jù)放入所有已選項 currentPageSelected.forEach(item => { if (!this.allMultipleSelection.includes(item)) { this.allMultipleSelection.push(item) } }) // 將所有已選項數(shù)據(jù)中當前頁沒選擇的項移除 currentPageNotSelected.forEach(item => { let idx = this.allMultipleSelection.indexOf(item) if (idx > -1) { this.allMultipleSelection.splice(idx, 1) } }) console.log(this.allMultipleSelection, 'all') },
此時還需要在切換頁面時將之間選擇項進行重新選中,即遍歷當前頁所有數(shù)據(jù)如果存在于所有已選項中,則將其置為已選擇。
fetchData () { // ... setTimeout(_ => { // ... // @tip 實現(xiàn)分頁復(fù)選 setTimeout(_ => { this.setSelectedRow() }, 50) }, 200) }, setSelectedRow () { // 設(shè)置當前頁已選項 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+Element ui實現(xiàn)樹形控件右鍵菜單
這篇文章主要為大家詳細介紹了Vue+Element ui實現(xiàn)樹形控件右鍵菜單,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-07-07Vue項目部署的實現(xiàn)(阿里云+Nginx代理+PM2)
這篇文章主要介紹了Vue項目部署的實現(xiàn)(阿里云+Nginx代理+PM2),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-03-03vue項目登錄成功拿到令牌跳轉(zhuǎn)失敗401無登錄信息的解決
這篇文章主要介紹了vue項目登錄成功拿到令牌跳轉(zhuǎn)失敗401無登錄信息的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02vue的ElementUI form表單如何給label屬性字符串中添加空白占位符
這篇文章主要介紹了vue的ElementUI form表單如何給label屬性字符串中添加空白占位符問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-10-10