简答
vue.js通过数据劫持结合发布者-订阅者模式,通过Object.defineProperty()劫持各个属性的setter和getter,在数据变动时发布消息给订阅者,触发相应的监听回调函数
具体流程
*每个组件都有相应的watch实例对象,它会在组件渲染的过程中把属性记录为依赖
之后,当依赖项的setter被调用时,会通知watch重新计算,从而使其关联组件得以更新
双向绑定例子
<div id="app">
<input v-model="msg">
<p>{{msg}}</p>
</div>
<script>
new Vue({
el: "#app",
data: {
msg: "hello"
}
});
</script>
双向绑定原理分析
代码
new Vue({
el: "#app",
data: {
obj: {
num: 5
}
},
created: function() {
console.log(this.obj);
}
});
结果
分析
vue通过ObjectdefineProperty()实现数据劫持,这是属性num多出两个对应的set方法和get方法的原因