el-table 结合 el-pagination 实现分页后默认是没有复选框记忆功能的,想到采用Map数据结构来存储所选选项。但是vue响应数据是不支持的,Map与Set里面的元素变化时Vue追踪不到这些变化,因此无法做出响应。
解决方法是将Map可序列化,写在computed中实现响应式。
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 57
| data () { return { myMap:new Map(), } }, methods:{ selectMemoriedDataFn () { let currentArr = this.myMap.get(this.currentPage) console.log('选中',currentArr) if (currentArr && currentArr.length) { let tempRowsIDs = this.tableData.map(L => L.id) currentArr.forEach((item) => { if (tempRowsIDs.includes(item.id)) { this.$refs.multipleTable.toggleRowSelection(this.tableData[tempRowsIDs.indexOf(item.id)]) } }) } }, handleSelect(val){ this.myMap.set(this.currentPage,val) let all=[] for (let value of this.myMap.values()) { value.forEach(item=>{ all.push(item) this.multipleSelectionAll=all } ) } }, handleCurrentChange(val){ this.currentPage=val if(this.myMap.has(this.currentPage)){ this.flag=true this.selectMemoriedDataFn() console.log('flag change',this.flag) } this.getData() }, }, computed:{ mySetAsList() { return Array.from(this.myMap); } }, watch:{ tableData () { this.$nextTick(() => { this.selectMemoriedDataFn() }) } },
|
踩坑:async-validator [inputvalue is required]
调单验证规则失效
没有绑定form表单导致校验失败
参考文章:https://blog.csdn.net/SGAFPZys/article/details/80754786