解决vue更新对象数组时,视图不更新以及更新错误问题
最近因为工作需求原因一直使用VUE框架,作为时下最热门的**渐进式框架**,开发起来确实非常给力~当然一个好的工具也不可能完全对你百依百顺,最近在工作中就遇到了一个问题,经过一下午的奋战终于搞定了,秉承着本熊一贯的无私奉献的原则,也为了向诸位同行一同探讨,特地临时搭了一个架子来演示解决过程,如果有更好方式欢迎指正:大致需求是这样的:当我点击类型下拉框时,要同步更新这行的数据:嗯...
最近因为工作需求原因一直使用VUE框架,作为时下最热门的渐进式框架,开发起来确实非常给力~
当然一个好的工具也不可能完全对你百依百顺,最近在工作中就遇到了一个问题,经过一下午的奋战终于搞定了,秉承着本熊一贯的无私奉献的原则,也为了向诸位同行一同探讨,特地临时搭了一个架子来演示解决过程,如果有更好方式欢迎指正:
大致需求是这样的:
当我点击类型下拉框时,要同步更新这行的数据:
嗯~感觉so easy!
一阵悦耳的:啪!啪!啪!啪…(是敲键盘啦~)
大致思路就是:
1、获取选中的类型值和对应的数据索引;
2、根据类型值去数据中找到对应的数据;
3、再根据索引将数据赋值给数组的指定位置
代码如下
methods: {
selectionType(val, index) {
var selectItem = {};
this.tableData.forEach((item, index) => {
if (item.type == val) {
selectItem = item;
}
});
this.tableData[index] = selectItem;
}
}
接下来我们看效果:
1、首先选择一个类型,点击:
2、查看效果,发现前三项数据正常更新了,当然只点一下怎么能满足我
3、然后就…筐瓢了。
但是没关系,遇到问题搞定就是了,然后查了下官方文档:
说得是呢~
立马开始实践:
// this.tableData[index] = selectItem;
this.$set(this.tableData, index, selectItem);
。。。。
经过一番研究,发现居然是因为索引问题:
1、为了获取当前数据的所在的索引,手动在生命周期中添加了index属性,以便于操作项能判断当前数据是否需要继续上移还是下移按钮;
2、虽然当替换完数组项后,重新调用了更新数组索引方法,但貌似这个并没有生效;
ok既然知道问题所在了,我们需要的是当点击下拉选项后,只更新数据,索引不变即可
// this.tableData[index] = selectItem;
// this.$set(this.tableData, index, selectItem);
this.tableData[index].type = selectItem.type;
this.tableData[index].name = selectItem.name;
this.tableData[index].tip = selectItem.tip;
this.tableData[index].required = selectItem.required;
this.tableData = upload(this.tableData);
再点点看
(1)
(2)
完美~~~
当然如果真的要一个个赋值未免太二了,所以最终代码如下:
methods: {
selectionType(val, index) {
var selectItem = {};
var newTableData = [];
this.tableData.forEach((item, index) => {
delete item.index;
if (item.type == val) {
selectItem = item;
}
});
this.tableData[index] = selectItem;
// JSON.parse(JSON.stringify(this.dataA));
// 解决data的数据给了newTableData变量,改变newTableData的值,data对象也变化的
newTableData = JSON.parse(JSON.stringify(this.tableData));
this.tableData = upload(newTableData);
}
}
如果有更好的方法欢迎批评指正
更多推荐
所有评论(0)