vue双向绑定简要分析


Posted in Javascript onMarch 23, 2017

Vue是当前很火的一款MVVM的轻量级框架,它是以数据驱动和组件化的思想构建的。因为它提供了简洁易于理解的api,使得我们很容易上手。

Vue与MVVM 如果你之前已经习惯了用jQuery操作DOM,学习Vue.js时请先抛开手动操作DOM的思维,因为Vue.js是数据驱动的,你无需手动操作DOM。Vue以数据为驱动,将自身的Dom元素与数据进行绑定,一旦创建绑定,Dom和数据保持同步。

vue双向绑定简要分析

其中ViewModel是Vue的核心,它是Vue的一个实例,作用于某个HTML元素上,可以是body也可以是某个id所指代的元素。双向绑定主流双向数据绑定实现原理

脏值检测 : 这是AngularJS实现双向数据绑定的方式。 原理是 当数据进行变更的时候对所有Model和View的绑定关系进行一次检查,识别是否有数据进行了变更,如果有变化则进行处理,由于可能进一步引发其他数据的改变,会再次循环这个过程,知道没有数据的变化之后。发送数据到视图重新渲染。 可想而知,这样的方式性能不高。

数据劫持: Vue采用的是 ES5的 Object,defineProperty() 方法,使用getter/setter监测对数据的操作,从而通知绑定是视图进行更新。 由于是在不同是数据上进行触发,可以精确的更新绑定的视图,而不是对所有的数据进行检测。

vue双向绑定简要分析

Vue是通过数据劫持的方式进行双向数据绑定的,最核心的方法就是 Object.defineProperty来实现对数据的劫持,检测数据的变化。
双向绑定的实现分为三个步骤:
1.实现一个数据监听器,能够对数据对象的所有属性进行监听,如有变动可拿到最新值并通知订阅者。
2.实现一个指令解析器,对每个元素的节点的指令进行解析。根据指令模板替换数据,以及绑定相应的更新函数。
3.实现一个观察者,能够订阅并收到每个属性变化的通知,执行指令绑定的相应回调函数,从而更新视图。

实现双向数据绑定核心代码:

vue双向绑定简要分析
vue双向绑定简要分析 

Dep类是一个订阅者类, 它具有一个订阅者数组与当前属性对应。关联当前数据和所有的 watcher 的依赖关系。
Dep.target是一个暴露出来的全局属性,暂存Watcher, 再添加完之后就会释放。
而在set中如果发现值的变换则通知所有订阅者(watcher)更新视图。

举例

vue双向绑定简要分析 

如果你对于Vue有一定了解的话,那么实现这个效果并不难。

<div id="demo">
 <p>{{message}}</p>
 <input type="text" v-model="message"/>
</div>

var App = new Vue({ 
 el: "#demo",
 data: { 
  message: 'Hello,World!'
 }
})

如果你想说我用jquery也可以实现,的确是这样:

<div id="box">
   <p class="text"></p>
   <input type="text" id="inputText">
   <script type="text/javascript" src="jquery.js"></script>
   <script type="text/javascript">
    $("#inputText").on("input", function() {
      var value = $(this).val() 
      $('.text').text(value)
    })
   </script>

这么来形容吧:jquery开发项目好比是老式的纺织机,而用Vue+Webpack开发好比是现代纺织工厂。区别就是一个上手容易,一个在生产效率,多成员协同,管理等方面却是质的飞跃。

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

Javascript 相关文章推荐
用正则表达式 动态创建/增加css style script 兼容IE firefox
Mar 10 Javascript
让ie运行js时提示允许阻止内容运行的解决方法
Oct 24 Javascript
JQuery EasyUI 日期控件如何控制日期选择区间
May 05 Javascript
JS+CSS实现仿新浪微博搜索框的方法
Feb 24 Javascript
JS实现CheckBox复选框全选全不选功能
May 06 Javascript
javascript冒泡排序小结
Apr 10 Javascript
字太多用...代替的方法(两种)
Mar 15 Javascript
JavaScript实现区块链
Mar 14 Javascript
使用vue 国际化i18n 实现多实现语言切换功能
Oct 11 Javascript
JS eval代码快速解密实例解析
Apr 23 Javascript
vue项目页面嵌入代码块vue-prism-editor的实现
Oct 30 Javascript
Vue 打包后相对路径的引用问题
Jun 05 Vue.js
Javascript面试经典套路reduce函数查重
Mar 23 #Javascript
JQuery 进入页面默认给已赋值的复选框打钩
Mar 23 #jQuery
vue.js实现含搜索的多种复选框(附源码)
Mar 23 #Javascript
js手机号4位显示空格,银行卡每4位显示空格效果
Mar 23 #Javascript
JS实现两周内自动登录功能
Mar 23 #Javascript
面试常见的js算法题
Mar 23 #Javascript
Vue.Js中的$watch()方法总结
Mar 23 #Javascript
You might like
第十三节--对象串行化
2006/11/16 PHP
php实时倒计时功能实现方法详解
2017/02/27 PHP
总结PHP内存释放以及垃圾回收
2018/03/29 PHP
使用非html5实现js板连连看游戏示例代码
2013/09/22 Javascript
js判断滚动条是否已到页面最底部或顶部实例
2014/11/20 Javascript
JavaScript如何自定义trim方法
2015/07/28 Javascript
基于jQuery实现返回顶部实例代码
2016/01/01 Javascript
基于Jquery和html5实现炫酷的3D焦点图动画
2016/03/02 Javascript
Vue.js开发环境搭建
2016/11/10 Javascript
javascript事件的绑定基础实例讲解(34)
2017/02/14 Javascript
angularjs封装$http为factory的方法
2017/05/18 Javascript
webpack学习笔记之代码分割和按需加载的实例详解
2017/07/20 Javascript
基于input动态模糊查询的实现方法
2017/12/12 Javascript
Angular2 父子组件通信方式的示例
2018/01/29 Javascript
Smartour 让网页导览变得更简单(推荐)
2019/07/19 Javascript
layui自己添加图片按钮并点击跳转页面的例子
2019/09/14 Javascript
Electron整合React使用搭建开发环境的步骤详解
2020/06/07 Javascript
支付宝小程序实现省市区三级联动
2020/06/21 Javascript
vue+Element-ui实现分页效果
2020/11/15 Javascript
js异步接口并发数量控制的方法示例
2020/11/22 Javascript
零基础写python爬虫之抓取百度贴吧代码分享
2014/11/06 Python
Python 限制线程的最大数量的方法(Semaphore)
2019/02/22 Python
Python for循环与range函数的使用详解
2019/03/23 Python
django数据关系一对多、多对多模型、自关联的建立
2019/07/24 Python
解决pyshp UnicodeDecodeError的问题
2019/12/06 Python
python入门之基础语法学习笔记
2020/02/08 Python
解决selenium+Headless Chrome实现不弹出浏览器自动化登录的问题
2021/01/09 Python
html5理解head_动力节点Java学院整理
2017/07/13 HTML / CSS
HTML5 Canvas如何实现纹理填充与描边(Fill And Stroke)
2013/07/15 HTML / CSS
法国二手MacBook销售网站:Okamac
2019/03/18 全球购物
授权委托书
2014/07/31 职场文书
高校教师个人总结
2015/02/10 职场文书
2015年保安个人工作总结
2015/04/02 职场文书
写作技巧:优秀文案必备的3种结构
2019/08/19 职场文书
Vue的列表之渲染,排序,过滤详解
2022/02/24 Vue.js
部分武汉产收音机展览
2022/04/07 无线电