Vue的双向数据绑定实现原理解析


Posted in Javascript onFebruary 17, 2020

这篇文章主要介绍了Vue的双向数据绑定实现原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

一、概述

vuejs是采取数据劫持结合发布者-订阅者模式的方式实现model-->view的数据绑定,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的数据回调。

至于view-model的绑定是对表单添加了change(input)的事件

二、思路

1、实现一个数据监听器Observer,能够对数据对象的所有属性进行监听,如果有变动可拿到最新值并通知订阅者

2、实现一个指令解析器Compile,对每个元素节点的指令进行扫描和解析,根据指令模板替换数据,以及绑定相应的更新函数

3、实现一个watcher,作为连接observer和compile 的桥梁,能够订阅并收到每个属性变动的通知,执行指令绑定的相应回调函数,从而更新视图

4、mvvm入口函数,整合以上三者

上述流程如图所示:

Vue的双向数据绑定实现原理解析

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery+.net实现浏览更多内容(改编php版本)
Mar 28 Javascript
JS完整获取IE浏览器信息包括类型、版本、语言等等
May 22 Javascript
JavaScript从数组中删除指定值元素的方法
Mar 18 Javascript
JS设置网页图片vspace和hspace属性的方法
Apr 01 Javascript
跟我学习javascript的prototype使用注意事项
Nov 17 Javascript
BootStrap 模态框实现刷新网页并关闭功能
Jan 04 Javascript
Bootstrap Table使用整理(三)
Jun 09 Javascript
教你如何编写Vue.js的单元测试的方法
Oct 17 Javascript
浅谈express.js框架中间件(middleware)
Apr 07 Javascript
Vue实现购物车的全选、单选、显示商品价格代码实例
May 06 Javascript
Servlet返回的数据js解析2种方法
Dec 12 Javascript
JavaScript 声明私有变量的两种方式
Feb 05 Javascript
JavaScript函数Call、Apply原理实例解析
Feb 17 #Javascript
javascript异常处理实现原理详解
Feb 17 #Javascript
Vue+webpack实现懒加载过程解析
Feb 17 #Javascript
javascript History对象原理解析
Feb 17 #Javascript
Vue中fragment.js使用方法小结
Feb 17 #Javascript
javascript实现倒计时效果
Feb 17 #Javascript
JavaScript将数组转换为链表的方法
Feb 16 #Javascript
You might like
Ext.data.PagingMemoryProxy分页一次性读取数据的实现代码
2010/04/07 PHP
简单谈谈PHP中的include、include_once、require以及require_once语句
2016/04/23 PHP
PHP中addslashes与mysql_escape_string的区别分析
2016/04/25 PHP
thinkPHP订单数字提醒功能的实现方法
2016/12/01 PHP
js iframe跨域访问(同主域/非同主域)分别深入介绍
2013/01/24 Javascript
window.open 以post方式传递参数示例代码
2014/02/27 Javascript
jQuery.position()方法获取不到值的安全替换方法
2015/03/13 Javascript
jQuery oLoader实现的加载图片和页面效果
2015/03/14 Javascript
jQuery 常见小例汇总
2016/12/14 Javascript
Vue-Router实现页面正在加载特效方法示例
2017/02/12 Javascript
js中less常用的方法小结
2017/08/09 Javascript
vue3.0 搭建项目总结(详细步骤)
2019/05/20 Javascript
vue界面发送表情的实现代码
2020/09/11 Javascript
javascript实现滚轮轮播图片
2020/12/13 Javascript
[01:06]DOTA2小知识课堂 Ep.02 吹风竟可解梦境缠绕
2019/12/05 DOTA
Python本地与全局命名空间用法实例
2015/06/16 Python
详解Python里使用正则表达式的ASCII模式
2017/11/02 Python
详解多线程Django程序耗尽数据库连接的问题
2018/10/08 Python
对python中的乘法dot和对应分量相乘multiply详解
2018/11/14 Python
在python中只选取列表中某一纵列的方法
2018/11/28 Python
python自定义线程池控制线程数量的示例
2019/02/22 Python
在PYQT5中QscrollArea(滚动条)的使用方法
2019/06/14 Python
django 实现将本地图片存入数据库,并能显示在web上的示例
2019/08/07 Python
Pytorch在dataloader类中设置shuffle的随机数种子方式
2020/01/14 Python
python 实现人和电脑猜拳的示例代码
2020/03/02 Python
python3 deque 双向队列创建与使用方法分析
2020/03/24 Python
北美领先的牛仔品牌:Buffalo David Bitton
2017/05/22 全球购物
Swisse官方海外旗舰店:澳大利亚销量领先,自然健康品牌
2017/12/15 全球购物
施华洛世奇中国官网:SWAROVSKI中国
2020/06/16 全球购物
医院护理人员的自我评价分享
2013/10/04 职场文书
2014学年自我鉴定
2014/02/23 职场文书
文化与传播毕业生求职信
2014/03/09 职场文书
团队精神的演讲稿
2014/05/14 职场文书
教师节表彰会主持词
2015/07/06 职场文书
详解Node.js如何处理ES6模块
2021/05/15 Javascript
Pygame游戏开发之太空射击实战敌人精灵篇
2022/08/05 Python