Closed Pzhicong closed 6 years ago
computed属性在初始化取值的时候,如果里面包含了data属性的值,也会触发data属性的getter,就会把computed属性的watcher添加到data属性的dep里面,比如:
data: {
name: 'foo'
},
computed: {
sayHi() {
return 'hello ' + this.name
}
}
<div>
{{sayHi}}
</div>
// 在解析模板的时候,发现sayHi这个computed属性有绑定dom,就会new 一个 watcher
// Dep.target = 此时的watcher实例,new Watcher的过程中回去执行 sayHi() 取值,会触发 data.name 的getter
// 就会把 Dep.target 添加到 data.name 的 dep队列里面
// 所以,实际上,dom是和 data.name 做了动态绑定。取data.name有变化的时候(注意不是sayHi有变化)
// 会通知调用sayHi来取值后,更新到dom上
明白了,感谢 @DMQ
属性变量变化是怎样触发计算属性变化的,这块没看明白,请教下