轻松理解vue的双向数据绑定问题


Posted in Javascript onOctober 30, 2017

Vue介绍

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

Vue与MVVM

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

双向绑定

主流双向数据绑定实现原理

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

单向数据绑定

指的是我们先把模板写好,然后把模板和数据(数据可能来自后台)整合到一起形成HTML代码,然后把这段HTML代码插入到文档流里面。
单向数据绑定缺点:HTML代码一旦生成完以后,就没有办法再变了,如果有新的数据来了,那就必须把之前的HTML代码去掉,再重新把新的数据和模板一起整合后插入到文档流中。 简单的来说就是DOM操作直接改变

数据数据双向

数据模型(Module)和视图(View)之间的双向绑定。

用户在视图上的修改会自动同步到数据模型中去,同样的,如果数据模型中的值发生了变化,也会立刻同步到视图中去。双向数据绑定的优点是无需进行和单向数据绑定的那CRUD(Create,Retrieve,Update,Delete)操作双向数据绑定最经常的应用场景就是表单了,这样当用户在前端页面完成输入后,不用任何操作,我们就已经拿到了用户的数据存放到数据模型中了。

如何使用js达到双向数据绑定

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<input type="text" id="userName">
<br>
<span id ="uName"></span>
<script>
  var obj={
    pwd:"1234"
  };
  //主要使用到了get和set方法,最为关键
  Object.defineProperty(obj,"userName",{
    get:function(){
      console.log('get init');
    },
    set:function(val){
      console.log("set init");
      document.getElementById("uName").innerText=val;
      document.getElementById("userNmae").value=val;
    }
  });
  document.getElementById("userName").addEventListener("keyup",function(event){
    obj.userName=event.target.value;
  }
  )
</script>
</body>
</html>

运行上述的dome,可以使用控制台,obj.username=123赋值,会自动触发set方法。若我们在控制台使用obj.username拿值可以触发get方法,这也就是vue的双向数据绑定的核心点。

总结

以上所述是小编给大家介绍的轻松理解vue的数据双向绑定问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
js中cookie的使用详细分析
May 28 Javascript
有关DOM元素与事件的3个谜题
Nov 11 Javascript
JS获得URL超链接的参数值实例代码
Jun 21 Javascript
js 数值转换为3位逗号分隔的示例代码
Feb 19 Javascript
浅谈重写window对象的方法
Dec 29 Javascript
jQuery插件MovingBoxes实现左右滑动中间放大图片效果
Feb 28 Javascript
Vue.js 插件开发详解
Mar 29 Javascript
QQ跳转支付宝并自动领红包脚本(最新)
Jun 22 Javascript
vue.js内置组件之keep-alive组件使用
Jul 10 Javascript
详解Vue项目在其他电脑npm run dev运行报错的解决方法
Oct 29 Javascript
详解Vue2.5+迁移至Typescript指南
Aug 01 Javascript
vue webpack build资源相对路径的问题及解决方法
Jun 04 Javascript
jQuery 禁止表单用户名、密码自动填充功能
Oct 30 #jQuery
移动端网页开发调试神器Eruda的介绍与使用技巧
Oct 30 #Javascript
ES6 javascript的异步操作实例详解
Oct 30 #Javascript
React Native 搭建开发环境的方法步骤
Oct 30 #Javascript
Bootstrap框架建立树形菜单(Tree)的实例代码
Oct 30 #Javascript
react实现一个优雅的图片占位模块组件详解
Oct 30 #Javascript
ES6 javascript中class类的get与set用法实例分析
Oct 30 #Javascript
You might like
php对二维数组进行相关操作(排序、转换、去空白等)
2015/11/04 PHP
如何使用GDB调试PHP程序
2015/12/08 PHP
PHP实现新型冠状病毒疫情实时图的实例
2020/02/04 PHP
表单填写时用回车代替TAB的实现方法
2007/10/09 Javascript
JavaScript 事件记录使用说明
2009/10/20 Javascript
js loading加载效果实现代码
2009/11/24 Javascript
JQuery切换显示的效果实例代码
2013/02/27 Javascript
网页右下角弹出窗体实现代码
2014/06/05 Javascript
jQuery制作简单柱状图实例
2015/01/28 Javascript
使用Node.js处理前端代码文件的编码问题
2016/02/16 Javascript
基于css3新属性transform及原生js实现鼠标拖动3d立方体旋转
2016/06/12 Javascript
Element-ui树形控件el-tree自定义增删改和局部刷新及懒加载操作
2020/08/31 Javascript
[04:02]2014DOTA2国际邀请赛 BBC每日综述中国战队将再度登顶
2014/07/21 DOTA
python实现的简单猜数字游戏
2015/04/04 Python
Python实现批量修改文件名实例
2015/07/08 Python
Python用threading实现多线程详解
2017/02/03 Python
Python使用numpy产生正态分布随机数的向量或矩阵操作示例
2018/08/22 Python
python程序控制NAO机器人行走
2019/04/29 Python
python urllib爬虫模块使用解析
2019/09/05 Python
Python tkinter实现简单加法计算器代码实例
2020/05/13 Python
Python中有几个关键字
2020/06/04 Python
python opencv pytesseract 验证码识别的实现
2020/08/28 Python
python利用线程实现多任务
2020/09/18 Python
测绘工程个人的自我评价
2013/11/10 职场文书
京剧自荐信
2014/01/26 职场文书
体育比赛口号
2014/06/09 职场文书
战友聚会策划方案
2014/06/13 职场文书
2014房屋登记授权委托书
2014/10/13 职场文书
再婚婚前财产协议书范本
2014/10/19 职场文书
加强干部作风建设整改方案
2014/10/24 职场文书
英语通知范文
2015/04/22 职场文书
检讨书模板大全
2015/05/07 职场文书
入党培养人考察意见
2015/06/08 职场文书
英语导游欢迎词
2015/09/30 职场文书
高中信息技术教学反思
2016/02/16 职场文书
导游词之杭州西湖
2019/09/19 职场文书