为了账号安全,请及时绑定邮箱和手机立即绑定

vue2给data的数据添加值的时候为什么push可以绑定数据,但是直接赋值不可以?

vue2给data的数据添加值的时候为什么push可以绑定数据,但是直接赋值不可以?

DIEA 2018-12-17 09:04:28
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操作是会使对应的视图更新)

查看完整回答
反对 回复 2018-12-17
  • 1 回答
  • 0 关注
  • 2585 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信