轻松理解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模拟多线程
Feb 07 Javascript
javascript学习笔记(六) Date 日期类型
Jun 19 Javascript
jQuery中index()方法用法实例
Dec 27 Javascript
yui3的AOP(面向切面编程)和OOP(面向对象编程)
May 01 Javascript
动态加载jQuery的两种方法实例分析
Jul 17 Javascript
只需五句话搞定JavaScript作用域(经典)
Jul 26 Javascript
老生常谈JavaScript中的this关键字
Oct 01 Javascript
微信小程序 教程之wxapp 视图容器 view
Oct 19 Javascript
Bootstrap栅格系统使用方法及页面调整变形的解决方法
Mar 10 Javascript
jQuery点击页面其他部分隐藏下拉菜单功能
Nov 27 jQuery
element form 校验数组每一项实例代码
Oct 10 Javascript
webpack常用配置总览(小结)
Nov 18 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数组
2006/10/09 PHP
用phpmyadmin更改mysql5.0登录密码
2008/03/25 PHP
php生成不重复随机数、数组的4种方法分享
2015/03/30 PHP
详解PHP的Yii框架的运行机制及其路由功能
2016/03/17 PHP
PHP文件操作详解
2016/12/30 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
thinkPHP5框架auth权限控制类与用法示例
2018/06/12 PHP
javascript学习笔记(三)显示当时时间的代码
2011/04/08 Javascript
js调用css属性写法
2013/09/21 Javascript
给应用部分的js代码设定一个统一的入口
2014/06/15 Javascript
判断window.onload是否多次使用的方法
2014/09/21 Javascript
jQuery控制frames及frame页面JS的方法
2016/03/08 Javascript
Vue.js双向绑定操作技巧(初级入门)
2016/12/27 Javascript
Jquery实现跨域异步上传文件总结
2017/02/03 Javascript
微信小程序常用简易小函数总结
2019/02/01 Javascript
js+html5 canvas实现ps钢笔抠图
2019/04/28 Javascript
[03:15]DOTA2-DPC中国联赛1月22日Recap集锦
2021/03/11 DOTA
Python实现的一个自动售饮料程序代码分享
2014/08/25 Python
python删除列表中重复记录的方法
2015/04/28 Python
Python中list初始化方法示例
2016/09/18 Python
Python分治法定义与应用实例详解
2017/07/28 Python
使用python读取csv文件快速插入数据库的实例
2018/06/21 Python
pandas的唯一值、值计数以及成员资格的示例
2018/07/25 Python
利用Python求阴影部分的面积实例代码
2018/12/05 Python
python3获取当前目录的实现方法
2019/07/29 Python
中国领先的专业演出票务网:永乐票务
2016/08/29 全球购物
澳大利亚手表品牌:Time IV Change
2018/10/06 全球购物
八年级英语教学反思
2014/01/09 职场文书
5.1手机促销活动
2014/01/17 职场文书
国际贸易毕业生求职信范文
2014/02/21 职场文书
晨会主持词
2014/03/17 职场文书
优质服务活动实施方案
2014/05/02 职场文书
公司运动会策划方案
2014/05/25 职场文书
优秀班主任先进事迹材料
2014/12/16 职场文书
店长岗位职责
2015/02/11 职场文书
获奖感言怎么写
2015/07/31 职场文书