data属性:a: {},b: [],在created的时候从服务器获取数据,需要填充到a和b中,因为数据需要过滤所以不能直接赋值,for(let key in response.data.list){ if(response.data.list[key].type == 2){ this.a[key] = response.data.list[key]
}
}修改a的值时,视图不会刷新。看了文档说是因为a的属性中没有key,新增的属性要$set。但是,对b的操作有两种结果。这样操作:for(let key in response.data.list){ if(response.data.list[key].type == 1){ this.b.push(response.data.list[key])
}
}修改b的值,视图会刷新。如果是这样:let index = 0;
for(let key in response.data.list){ if(response.data.list[key].type == 1){
this.b[index] = response.data.list[key] index ++
}
}修改b的值,视图不会刷新。为什么push的时候不需要$set?
1 回答
千巷猫影
TA贡献1829条经验 获得超7个赞
vue数据双向绑定依赖于Object.defineProperty( ),而这个东西对数组的变动无法检测,所以你的arr[i]怎么变,对vue来说它不知道,当然视图也不会跟新;所以你有两种方法:1、将你筛选的arrry先用一个数组arr保存,然后一次性this.b = arr(引用数居的指针变了,vue会对这个值重新init,视图会更新);2、this.b[index] = response.data.list[key]换成this.b.push(response.data.list[key])--(vue封装的方法,就是说data里的每个属性的prototype上都重写了这个方法,push操作是会使对应的视图更新)
添加回答
举报
0/150
提交
取消