src/core/observer/index.js
src/core/observer/array.js arrayMethods
- 当data的数组对象中本来没有某个属性,然后点击按钮动态增加某个属性的时候,此时此属性是没有get和set的,也就是没有响应式机制,如果想要让你动态增加的某个属性有响应式变化,那么就直接在数据的源头给他初始化这个属性,具体看下一条。
- 当向后端返回的结果的数组对象中新增属性的时候,建议首先循环赋值完成之后再赋值给对应的data中的变量,这样data中变量给每个数组对象里面的属性都会加上get和set
- 例如:后端返回一个数组对象是 [{xx: 1},{xx: 2}],然后我们获取到这个数组对象后把这个数组对象赋值给了this.list,那么我的data中的list的两个数组对象中的xx属性就有get和set了,换句话说就是响应式的了,如果我们想要点击按钮的时候动态给当前数组对象中增加一个cc属性,this.list[0].cc = 2, 请注意 此时cc属性虽然添加到了我们对应的数组对象中,但是它不是响应式的,想要解决这个问题,那就直接在获取后端的数据的时候直接循环添加cc属性,设置为空,然后再赋值给this.list就行了
调试
- 我们可以看到上面的数组在最开始第一步的时候只有[1,2,3] 三个元素,然后当我们执行了push方法后增加了一个元素,且视图也实时更新了,这是因为在源码中vue对修改数组的方法做了响应式的处理
- 我们再看第三第四部修改list数组也生效了,但是视图并没有实时更新,这是因为vue在对数组的处理上面只修改了一些数组的方法和对数组中对象增加了响应式的操作,这是因为数组可能有很长,出于性能的考虑,没有对数组的每一个元素都做响应式的处理。如果我们想实现第三第四步响应式可以使用数组的splice方法就行了
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注阿兔在线工具的更多内容!