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的下拉框改变动态添加和删除表格实现代码
Sep 12 Javascript
jQuery学习笔记(4)--Jquery中获取table中某列值的具体思路
Apr 10 Javascript
使用js操作cookie的一点小收获分享
Sep 03 Javascript
第一次接触JS require.js模块化工具
Apr 17 Javascript
Vue中封装input组件的实例详解
Oct 17 Javascript
详解webpack require.ensure与require AMD的区别
Dec 13 Javascript
vue实现的组件兄弟间通信功能示例
Dec 04 Javascript
Node.js fs模块(文件模块)创建、删除目录(文件)读取写入文件流的方法
Sep 03 Javascript
layui 上传图片 返回图片地址的方法
Sep 26 Javascript
vue操作dom元素的3种方法示例
Sep 20 Javascript
Openlayers测量距离与面积的实现方法
Sep 25 Javascript
基于Cesium绘制抛物弧线
Nov 18 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
php继承的一个应用
2011/09/06 PHP
基于PHP输出缓存(output_buffering)的深入理解
2013/06/13 PHP
PHP+jQuery 注册模块的改进(三):更新到Smarty3.1
2014/10/14 PHP
php中简单的对称加密算法实现
2017/01/05 PHP
学习ExtJS Column布局
2009/10/08 Javascript
使用JS CSS去除IE链接虚线框的三种方法
2013/11/14 Javascript
AngularJS中的Directive自定义一个表格
2016/01/25 Javascript
jquery实现可旋转可拖拽的文字效果代码
2016/01/27 Javascript
Node.js编写组件的三种实现方式
2016/02/25 Javascript
Angularjs material 实现搜索框功能
2016/03/08 Javascript
js 模仿锚点定位的实现方法
2016/11/19 Javascript
设置jquery UI 控件的大小方法
2016/12/12 Javascript
JS 在数组指定位置插入/删除数据的方法
2017/01/12 Javascript
js实现倒计时关键代码
2017/05/05 Javascript
详解如何用模块化的方式写vuejs
2017/12/16 Javascript
微信小程序开发之自定义tabBar的实现
2018/09/06 Javascript
5分钟教你用nodeJS手写一个mock数据服务器的方法
2019/09/10 NodeJs
[03:01]2014DOTA2国际邀请赛 小组赛7月13日TOPPLAY
2014/07/14 DOTA
[41:54]2018DOTA2亚洲邀请赛 4.1 小组赛A组加赛 TNC vs Liquid
2018/04/03 DOTA
进一步探究Python的装饰器的运用
2015/05/05 Python
基于Python闭包及其作用域详解
2017/08/28 Python
Python中使用__new__实现单例模式并解析
2019/06/25 Python
python和c语言的主要区别总结
2019/07/07 Python
Django框架视图函数设计示例
2019/07/29 Python
python 图片二值化处理(处理后为纯黑白的图片)
2019/11/01 Python
python实现飞机大战小游戏
2019/11/08 Python
基于python3的socket聊天编程
2020/02/17 Python
Python3爬虫里关于Splash负载均衡配置详解
2020/07/10 Python
Tessabit日本:集世界奢侈品和设计师品牌的意大利精品买手店
2020/01/07 全球购物
个人求职简历的自我评价范文
2013/10/09 职场文书
英文求职信写作小建议
2014/02/16 职场文书
四年级评语大全
2014/04/21 职场文书
关键在于落实心得体会
2014/09/03 职场文书
领导参观欢迎词
2015/01/26 职场文书
日本读研:怎样写好一篇日本研究计划书?
2019/07/15 职场文书
NASA 机智号火星直升机拍到了毅力号设备碎片
2022/04/29 数码科技