轻松理解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 相关文章推荐
判断多个元素(RADIO,CHECKBOX等)是否被选择的原理说明
Feb 18 Javascript
jquery聚焦文本框与扩展文本框聚焦方法
Oct 12 Javascript
本地图片预览(支持IE6/IE7/IE8/Firefox3)经验总结
Mar 25 Javascript
兼容IE、firefox以及chrome的js获取时间(getFullYear)
Jul 04 Javascript
Angular和Vue双向数据绑定的实现原理(重点是vue的双向绑定)
Nov 22 Javascript
JavaScript实现的DOM树遍历方法详解【二叉DOM树、多叉DOM树】
May 07 Javascript
Angularjs实现多图片上传预览功能
Jul 18 Javascript
vue2.0的虚拟DOM渲染思路分析
Aug 09 Javascript
element-ui 关于获取select 的label值方法
Aug 24 Javascript
Node.js控制台彩色输出的方法与原理实例详解
Dec 01 Javascript
javascript 函数的暂停和恢复实例详解
Apr 25 Javascript
vuecli项目构建SSR服务端渲染的实现
Oct 30 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
终于听上了直流胆调频
2021/03/02 无线电
一个php导出oracle库的php代码
2009/04/20 PHP
学习php开源项目的源码指南
2014/12/21 PHP
PHP5.2中PDO的简单使用方法
2016/03/25 PHP
DWZ+ThinkPHP开发时遇到的问题分析
2016/12/12 PHP
JSON 学习之JSON in JavaScript详细使用说明
2010/02/23 Javascript
《JavaScript高级程序设计》阅读笔记(一) ECMAScript基础
2012/02/27 Javascript
jquery 单引号和双引号的区别及使用注意
2013/07/31 Javascript
jquery防止重复执行动画避免页面混乱
2014/04/22 Javascript
Javascript模块化编程详解
2014/12/01 Javascript
js在指定位置增加节点函数insertBefore()用法实例
2015/01/12 Javascript
jquery实现表格隔行换色效果
2015/11/19 Javascript
js实现继承的5种方式
2015/12/01 Javascript
js前端解决跨域问题的8种方案(最新最全)
2016/11/18 Javascript
JS使用正则表达式提交页面验证的代码
2019/10/16 Javascript
jquery使用echarts实现有向图可视化功能示例
2019/11/25 jQuery
简单介绍Python中的decode()方法的使用
2015/05/18 Python
Python使用reportlab将目录下所有的文本文件打印成pdf的方法
2015/05/20 Python
Python实现修改IE注册表功能示例
2018/05/10 Python
解决python3捕获cx_oracle抛出的异常错误问题
2018/10/18 Python
pandas 时间格式转换的实现
2019/07/06 Python
python读取.mat文件的数据及实例代码
2019/07/12 Python
在Python中获取操作系统的进程信息
2019/08/27 Python
Python基于pygame实现单机版五子棋对战
2019/12/26 Python
利用python汇总统计多张Excel
2020/09/22 Python
python实现代码审查自动回复消息
2021/02/01 Python
CSS3的Border-radius轻松制作圆角
2012/12/24 HTML / CSS
美国领先的个性化礼品商城:Personalization Mall
2019/07/27 全球购物
使用索引(Index)有哪些需要考虑的因素
2016/10/19 面试题
简历中自我评价范文3则
2013/12/14 职场文书
学校消防安全制度
2014/01/30 职场文书
廉政承诺书
2015/01/19 职场文书
人与自然观后感
2015/06/16 职场文书
教师节晚会主持词
2015/06/30 职场文书
学风建设主题班会
2015/08/17 职场文书
JavaScript实现登录窗体
2021/06/22 Javascript