Vue的双向数据绑定 · Issue #2 · AdaPY/doc · GitHub

您所在的位置:网站首页 vue组件实现双向绑定 Vue的双向数据绑定 · Issue #2 · AdaPY/doc · GitHub

Vue的双向数据绑定 · Issue #2 · AdaPY/doc · GitHub

2023-05-16 10:42| 来源: 网络整理| 查看: 265

Vue.js的双向数据绑定是通过watcher对象、Object.defineProperty()方法以及data中的setter和getter方法共同实现的。

Vue.js的双向数据绑定是通过使用Object.defineProperty()方法来实现的。这个方法可以在对象上定义一个新属性或修改已经存在的属性,并指定该属性的一些特性,比如是否可枚举、是否可写等等。Vue.js利用这个方法来实现对数据的监听和响应。

当我们在模板中使用v-model指令进行双向数据绑定时,Vue会自动为该元素创建一个相应的watcher对象,然后通过Object.defineProperty()方法将该元素的value属性与data中对应的属性进行绑定。这样,在用户输入时,该元素的value属性改变会触发data中对应属性的setter方法,进而通知所有与该属性相关的watcher对象进行更新。

同样地,在data中对应属性的值发生变化时,也会触发该属性的setter方法,再次通知所有与该属性相关的watcher对象进行更新,从而保证了视图与数据的同步。

v-model指令可以在表单元素和组件上创建双向数据绑定。 如果需要在非表单元素上实现双向数据绑定,可以使用自定义指令或者技术属性来实现。

vue实现数据绑定的核心是通过监听数据变化,然后更新视图。

1. Watcher对象 Watcher对象作为一个观察者,用于观察数据的变化,当数据发生变化时,它会自动调用回调函数,从而更新视图。 2. Object.defineProperty()方法 Object.defineProperty()是es5中新增的方法,它可以重新定义对象的属性,包括可读性,可写性和枚举性等。在vue中实现对数据的监听和响应。 3. data中的setter和getter方法 vue在创建实例时,会自动将data对象中的属性转换成get和set方法,并在其中调用Watcher对象来实现数据绑定。

Vue.js 是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的 setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调。主要分为以下几个步骤:

1.需要 observe 的数据对象进行递归遍历,包括子属性对象的属性,都加上 setter 和 getter 这样的话,给这个对象的某个值赋值,就会触发 setter,那么就能监听到了数据变化

2.compile 解析模板指令,将模板中的变量替换成数据,然后初始化渲染页面视图,并将每个指令对应的节点绑定更新函数,添加监听数据的订阅者,一旦数据有变动,收到通知,更新视图

3.Watcher 订阅者是 Observer 和 Compile 之间通信的桥梁,主要做的事情是: ①在自身实例化时往属性订阅器(dep)里面添加自己 ②自身必须有一个 update()方法 ③待属性变动 dep.notice()通知时,能调用自身的 update()方法,并触发 Compile 中绑定的回调,则功成身退。

4.MVVM 作为数据绑定的入口,整合 Observer、Compile 和 Watcher三者,通过 Observer 来监听自己的 model 数据变化,通过 Compile来解析编译模板指令,最终利用 Watcher 搭起 Observer 和 Compile之间的通信桥梁,达到数据变化 -> 视图更新;视图交互变化(input)-> 数据 model 变更的双向绑定效果。 image

Vue实现数据绑定的核心代码主要包括以下几部分:

1. Observer:观察者模式。通过Object.defineProperty()来监听对象的属性变化,当属性发生变化时,通知Dep进行更新 2. Compiler:解析器。通过遍历DOM树获取节点数据,并生成对应的Watcher实例。 3. Watcher:订阅者。当Observer监听到属性变化时,通知Watcher进行更新。 4. Dep:消息订阅器。用来收集Watcher,当数据变化时触发notify通知所有Watcher进行更新。 详细代码见



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3