Vue双向绑定
转自:vue.js关于Object.defineProperty的利用原理 https://www.jianshu.com/p/07ba2b0c8fca
把一个普通对象(a={b:1})传给 Vue 实例作为它的 data 选项,Vue.js 将遍历它的属性,用Object.defineProperty 将它们转为 getter/setter,如图绿色的部分所示。每次用户更改data里的数据的时候,比如a.b =1
,setter就会重新通知Watcher进行变动,Watcher再通知Directive对dom节点进行更改。
转自:vue追踪变化
因为 Vue 在初始化实例时将属性转为 getter/setter
,所以属性必须在 data
对象上才能让 Vue 转换它,这样才能让它是响应的。
vm.b = 2 // vm.b` 是非响应的Vue 不允许在已经创建的实例上动态添加新的根级响应式属性
Vue.set(vm.someObject, 'b', 2) //可以使用 Vue.set(object, key, value) 方法将响应属性添加到嵌套的对象上
this.$set(this.someObject,'b',2) //还可以使用 vm.$set 实例方法,这也是全局 Vue.set 方法的别