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 相关文章推荐
js中if语句的几种优化代码写法
Mar 12 Javascript
js性能优化 如何更快速加载你的JavaScript页面
Mar 17 Javascript
js 实现日期灵活格式化的小例子
Jul 14 Javascript
js获取url参数代码实例分享(JS操作URL)
Dec 13 Javascript
js控制当再次点击按钮时的间隔时间
Jun 03 Javascript
在JS方法中返回多个值的方法汇总
May 20 Javascript
第一章之初识Bootstrap
Apr 25 Javascript
js实现人民币大写金额形式转换
Apr 27 Javascript
简单实现js鼠标跟随效果
Aug 02 Javascript
在Vue.js中使用Mixins的方法
Sep 12 Javascript
微信小程序开发之好友列表字母列表跳转对应位置
Sep 26 Javascript
vue使用swiper实现中间大两边小的轮播图效果
Nov 24 Javascript
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
隐藏X-Space个人空间下方版权方法隐藏X-Space个人空间标题隐藏X-Space个人空间管理版权方法
2007/02/22 PHP
php入门学习知识点一 PHP与MYSql连接与查询
2011/07/14 PHP
Code:loadScript( )加载js的功能函数
2007/02/02 Javascript
DOM 中的事件处理介绍
2012/01/18 Javascript
网页中返回顶部代码(多种方法)另附注释说明
2013/04/24 Javascript
js 数组操作之pop,push,unshift,splice,shift
2014/01/29 Javascript
JavaScript中document对象使用详解
2015/01/06 Javascript
jQuery实现多级联动下拉列表查询框
2016/01/18 Javascript
jQuery中DOM节点的删除方法总结(超全面)
2017/01/22 Javascript
jquery基于layui实现二级联动下拉选择(省份城市选择)
2017/06/20 jQuery
浅谈JS中this在各个场景下的指向
2019/08/14 Javascript
JS中数组实现代码(倒序遍历数组,数组连接字符串)
2019/12/29 Javascript
Java 生成随机字符的示例代码
2021/01/13 Javascript
[03:11]不朽宝藏三外观展示
2020/09/18 DOTA
Python Web开发模板引擎优缺点总结
2014/05/06 Python
从零学python系列之数据处理编程实例(二)
2014/05/22 Python
python字典多键值及重复键值的使用方法(详解)
2016/10/31 Python
Python实现将数据库一键导出为Excel表格的实例
2016/12/30 Python
多版本Python共存的配置方法
2017/05/22 Python
Python之pymysql的使用小结
2019/07/01 Python
浅析PyTorch中nn.Module的使用
2019/08/18 Python
Python中base64与xml取值结合问题
2019/12/22 Python
pandas 对group进行聚合的例子
2019/12/27 Python
PyCharm如何导入python项目的方法
2020/02/06 Python
Python面向对象魔法方法和单例模块代码实例
2020/03/25 Python
Python批量处理csv并保存过程解析
2020/05/16 Python
塔吉特百货公司官网:Target
2017/04/27 全球购物
澳洲女装时尚在线:Blue Bungalow
2018/05/05 全球购物
寒假思想汇报
2014/01/10 职场文书
经销商培训邀请函
2014/01/21 职场文书
大四自我鉴定
2014/02/08 职场文书
六查六看自查材料
2014/02/17 职场文书
2014年留守儿童工作总结
2014/12/10 职场文书
入党政审材料范文
2014/12/24 职场文书
车辆管理制度范本
2015/08/05 职场文书
深入理解 Golang 的字符串
2022/05/04 Golang