使用场景:
table 列表中 用户操作时改变记录状态时,不实时调接口,切换到别的页数能来回返显操作过的状态,最后通过提交按钮一起提交
$set使用解决 如果在实例创建之后修改属性状态到实例上,它不会触发视图更新的问题
针对于操作项来说 关键代码
// 操作后记录当前操作项,存下,同事改变列表当前项的数据状态,这里不考虑操作以后和原来状态有没有发生改变(因为双数次会让状态回到初始撞他),只要操作了该项, 都保存下来
changeStatus(data, index) {
this.tableData[index].complainStatus = 1; // 状态值改变,原来是null 赋值为1
const changeItem = this.tableData[index];
this.$set(this.tableData, index, changeItem);
this.$set(
this.allSelectData,
index + (this.pageNum - 1) * 10,
changeItem
); // 这里是针对某一项的,针对 index,所以allSelectData中会有为null的项,后续需要处理
this.getChangeItem();
}
// 获取列表状态改变项
getChangeItem() {
this.resultList = []; // 最终提交的结果
if (this.allSelectData.length) { // 处理为空的项摘除
_map(this.allSelectData, v => {
if (v) {
this.resultList.push({
id: v.id,
complainStatus: v.complainStatus,
entType: v.entType
});
}
});
}
},
针对来回切换table列表来说 关键代码
// 因为切换的时候有去调接口,这里只考虑拿到当前页数据来说
假设这里现在调接口返回的数据为 data, 对 data进行处理,需要考虑 this.allSelectEntData是否存在,因为有可能没有操作而来回切换
if(this.allSelectData.length){
const newTableData = []; // 存通过处理后最终展示的列表页数据
data.list.map((item, index) => {
this.allSelectData.forEach((d, i) => {
if (item.code == d.code) { // 这里的 code 必须是唯一的,列表中不会有重复的
item.complainStatus = d.complainStatus;
}
});
newTableData.push(item);
});
this.tableData = newTableData;
}