vue双向绑定
浅析Vue双向绑定
双向绑定:
Vue 最独特的特性之一,是其非侵入性的响应式系统。数据模型仅仅是普通的 JavaScript 对象。而当你修改它们时,视图会进行更新。
那么,Vue是如何实现的呢?
vue.js 则是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调。
整体思路
核心:通过Object.defineProperty()来实现对属性的劫持,达到监听数据变动的目的
要实现mvvm的双向绑定,就必须要实现以下几点:
1、实现一个数据监听器Observer,能够对数据对象的所有属性进行监听,如有变动可拿到最新值并通知订阅者
2、实现一个指令解析器Compile,对每个元素节点的指令进行扫描和解析,根据指令模板替换数据,以及绑定相应的更新函数
3、实现一个Watcher,作为连接Observer和Compile的桥梁,能够订阅并收到每个属性变动的通知,执行指令绑定的相应回调函数,从而更新视图
4、mvvm入口函数,整合以上三者
二、vue数据双向绑定原理
vue的数据双向绑定主要通过Object.defineProperty()方法来进行数据劫持以及发布者-订阅模式来实现的,
vue是怎么实现数据劫持的呢?vue实例话的时候会去遍历所有的属性,给这些属性添加get和set方法进行数据劫持
以上就是mvvm实现双向绑定的思路了,那么具体怎么实现呢?
我们开头的时候说到了,要想实现数据的双向绑定首先就要通过数据拦截来进行监听数据的改变,这个时候就要设置一个监听器Observer来进行监听,如果属性发生改变的话就告诉订阅者Watcher看看是否需要改变,同时的话订阅者可以有好多个,我们就用一个订阅者管理器(Dep)来管理这些订阅者。紧接着我们还要有个指令解析器来对每个节点进行扫描和解析(解析节点的指令如v-on),把他们初始化成一个订阅器Watcher,并且绑定相应的函数,Watcher会对比前后两个的数值是否发生变化,然后确定是否通知视图进行重新渲染;
以上的图片可以具,体归纳为:
1.实现一个监听器Observer,用来劫持并监听所有属性,如果有变动的,就通知订阅者。
2.实现一个订阅者Watcher,可以收到属性的变化通知并执行相应的函数,从而更新视图。
3.实现一个解析器Compile,可以扫描和解析每个节点的相关指令,并根据初始化模板数据以及初始化相应的订阅器。
// :多方借鉴
以上是 vue双向绑定 的全部内容, 来源链接: utcz.com/z/377758.html