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追踪变化


    因为 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 方法的别