检测变化
在使用Vue的过程中,有时候发现,修改了data中的属性,页面却没有发生变化。
哪些数据变化不能被检测?如何解决?
直接修改数组项,给被观测的对象添加一个新的key
的时候,由于对象属性上没有添加setter、getter,不会触发更新
可以使用Vue.set(obj, newKey, value)
或Vue.set(array, index, value
来触发更新
Vue.set
1 | // src/core/global-api/index |
1 | // src/core/observer/index.js |
为什么对于数组的处理,调用splice
方法,就可以触发到数组项的更新?
是因为在创建响应式对象的时候,Vue对数组原型做了一些处理,重写了部分原型上的方法
1 | // src/core/observer/index.js |
1 | // src/core/observer/array.js |
Vue.set
本质上都是手动调用 notify
来触发更新