美文网首页
vue响应式原理

vue响应式原理

作者: 回不去的那些时光 | 来源:发表于2020-01-05 20:56 被阅读0次

原理

vue实例的data选项,vue 将遍历此对象的所有的属性,并使用 Object.defineProperty 把这些属性全部转化为 getter/setter。

检测变化的注意事项

由于 Vue 会在初始化实例时对属性执行 getter/setter 转化,所以属性必须在 data 对象上存在才能让 Vue 将它转换为响应式的。例如:

var vm = new Vue({
  data:{
    a:1
  }
})

// `vm.a` 是响应式的

vm.b = 2    // `vm.b` 是非响应式的

对于已经创建的实例,Vue 不允许动态添加根级别的响应式属性。但是,可以使用 Vue.set(object, propertyName, value) 方法向嵌套对象添加响应式属性。例如:

Vue.set(vm.someObject, 'b', 2)
或者
this.$set(this.someObject,'b',2)

如果想要为已知对象赋值多个新属性可以使用 Object.assign

// 代替 `Object.assign(this.someObject, { a: 1, b: 2 })`
this.someObject = Object.assign({}, this.someObject, { a: 1, b: 2 })

声明响应式属性

由于 Vue 不允许动态添加根级响应式属性,所以你必须在初始化实例前声明所有根级响应式属性,哪怕只是一个空值:

var vm = new Vue({
  data: {
    // 声明 message 为一个空值字符串
    message: ''
  },
  template: '<div>{{ message }}</div>'
})
// 之后设置 `message`
vm.message = 'Hello!'

相关文章

网友评论

      本文标题:vue响应式原理

      本文链接:https://www.haomeiwen.com/subject/glvcactx.html