- 首先,当创建Vue实例时,传入的
data
选项会被转换为响应式对象。每个属性都被转换为"getter/setter",并被添加到Vue的响应式系统中。
var vm = new Vue({
data: {
message: 'Hello Vue!'
}
});
- 在模板中,将
message
属性与输入框进行双向绑定,使用v-model
指令。
<input type="text" v-model="message">
<p>{{ message }}</p>
这里,v-model="message"
告诉Vue将输入框的值与message
属性进行双向绑定。
-
当用户在输入框中输入内容时,触发了输入事件。Vue会捕获这个事件,并自动更新
message
属性。 -
通过实现"getter/setter",Vue能够在
message
属性被读取或修改时进行依赖追踪。
// 转化后的data对象
{
message: 'Hello Vue!',
// 生成的getter/setter
get message() {
// 依赖追踪:如果有相关的视图依赖该属性,则将其添加到依赖列表中
/* ... */
return this._data.message;
},
set message(value) {
// 响应变化:在属性被修改时,触发视图更新
/* ... */
this._data.message = value;
}
}
- 当
message
属性被更新时,Vue的响应式系统会通知相关的视图进行更新。
在上述代码中,当用户在输入框中输入内容时,message
属性会自动更新,并且对应的{{ message }}
表达式也会实时更新显示最新的值。
这就是Vue.js的数据双向绑定原理:通过响应式系统追踪数据变化,并利用指令建立数据与视图之间的关联,从而实现数据和视图的双向同步。