vue過濾表格數(shù)據(jù)導(dǎo)致的索引錯亂問題及解決
問題描述
在一個表單中有一個表格需要操作篩選和編輯
我用tableData.filter(filterEditTable)過濾了表格數(shù)據(jù),在過濾后的表格數(shù)據(jù)中進行編輯或刪除操作時,直接使用過濾后數(shù)組的索引(filterEditTable 的索引)會導(dǎo)致操作錯誤,因為這個索引并不對應(yīng)原始數(shù)據(jù)源(tableData)的位置

解決方案
保持數(shù)據(jù)源(tableData)的完整性,只通過控制表格的顯示屬性來過濾,處理“編輯/刪除”和“篩選”共存場景。
實現(xiàn)
<el-table
:data="tableData"
:row-class-name="tableRowClassName">
<!-- 列定義... -->
</el-table>methods: {
// 動態(tài)添加類名
tableRowClassName({row}) {
// 如果不滿足篩選條件,添加 'hidden-row' 類
if (!row.name.includes(this.searchKeyword)) {
return 'hidden-row';
}
return '';
},
handleDelete(index) {
// 這里的 index 直接對應(yīng) form.detailsList 的索引,非常安全!
this.tableData.splice(index, 1);
}
}
/* 隱藏行的 CSS */
/* 必須加 ::v-deep (或者 /deep/ 或 >>>) */
::v-deep .el-table .hidden-row {
display: none !important; /* 加上 !important 強制覆蓋 */
}
這樣做的好處
- 索引準(zhǔn)確:scope.$index 永遠指向 tableData的真實位置,刪除和編輯不會錯位。
- 數(shù)據(jù)不丟失:篩選只是“視覺上的隱藏”,數(shù)據(jù)依然存在于內(nèi)存中,用戶切換篩選條件后數(shù)據(jù)還在。
- 新增行處理簡單:新增的行直接 push 進 tableData,表格會自動渲染,如果它符合篩選條件就會自動顯示,不符合就自動隱藏,無需額外邏輯。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue項目使用axios發(fā)送請求讓ajax請求頭部攜帶cookie的方法
今天小編就為大家分享一篇vue項目使用axios發(fā)送請求讓ajax請求頭部攜帶cookie的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-09-09
Vue數(shù)據(jù)增刪改查與表單驗證的實現(xiàn)流程介紹
這篇文章主要介紹了Vue數(shù)據(jù)增刪改查與表單驗證的實現(xiàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-10-10
使用websocket和Vue2中的props實時更新數(shù)據(jù)方式
這篇文章主要介紹了使用websocket和Vue2中的props實時更新數(shù)據(jù)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08
Vue使用axios(Ajax)+ElementUI實現(xiàn)登錄實踐
本文介紹了如何使用Vue和ElementUI框架創(chuàng)建一個登錄頁面,并實現(xiàn)前后端交互,同時,還討論了跨域問題的解決方案以及ES6中的箭頭函數(shù)2026-03-03

