轻松理解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图片向右一张张滚动效果实例代码
Nov 23 Javascript
JavaScript初学者建议:不要去管浏览器兼容
Feb 04 Javascript
javascript继承机制实例详解
Nov 20 Javascript
jQuery实现页面顶部显示的进度条效果完整实例
Dec 09 Javascript
深入剖析javascript中的exec与match方法
May 18 Javascript
jQuery Easyui Datagrid实现单行的上移下移及保存移动的结果
Aug 15 Javascript
使用snowfall.jquery.js实现爱心满屏飞的效果
Jan 05 Javascript
AngularJS select设置默认值的实现方法
Aug 25 Javascript
thinkjs 文件上传功能实例代码
Nov 08 Javascript
微信小程序官方动态自定义底部tabBar的例子
Sep 04 Javascript
JS如何实现网站中PC端和手机端自动识别并跳转对应的代码
Jan 08 Javascript
vue实现移动端input上传视频、音频
Aug 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
Codeigniter生成Excel文档的简单方法
2014/06/12 PHP
JQuery在光标位置插入内容的实现代码
2010/06/18 Javascript
js中将字符串转换成json的三种方式
2011/01/12 Javascript
基于jQuery的自动完成插件
2011/02/03 Javascript
原生Js页面滚动延迟加载图片实现原理及过程
2013/06/24 Javascript
从数组中随机取x条不重复数据的JS代码
2013/12/24 Javascript
Jquery实现控件的隐藏和显示实例
2014/02/08 Javascript
javascript 获取HTML DOM父、子、临近节点
2014/06/16 Javascript
js图片闪动特效可以控制间隔时间如几分钟闪动一下
2014/08/12 Javascript
JS+CSS实现可以凹陷显示选中单元格的方法
2015/03/02 Javascript
原生js制作简单的数字键盘
2015/04/24 Javascript
JavaScript人脸识别技术及脸部识别JavaScript类库Tracking.js
2015/09/14 Javascript
基于js对象,操作属性、方法详解
2016/08/11 Javascript
jQuery多级联动下拉插件chained用法示例
2016/08/20 Javascript
angular项目中bootstrap-datetimepicker时间插件的使用示例
2018/03/15 Javascript
跟老齐学Python之用Python计算
2014/09/12 Python
举例讲解Python的Tornado框架实现数据可视化的教程
2015/05/02 Python
json跨域调用python的方法详解
2017/01/11 Python
python实现数据预处理之填充缺失值的示例
2017/12/22 Python
Python中的pack和unpack的使用
2018/03/12 Python
Python读取txt文件数据的方法(用于接口自动化参数化数据)
2018/06/27 Python
python导包的几种方法(自定义包的生成以及导入详解)
2019/07/15 Python
Python使用正则实现计算字符串算式
2019/12/29 Python
浅谈python 类方法/静态方法
2020/09/18 Python
python中把元组转换为namedtuple方法
2020/12/09 Python
python 如何上传包到pypi
2020/12/24 Python
Python的Tqdm模块实现进度条配置
2021/02/24 Python
HTML5 Web存储方式的localStorage和sessionStorage进行数据本地存储案例应用
2012/12/09 HTML / CSS
银行实习自我鉴定
2013/10/12 职场文书
会计核算科岗位职责
2014/03/19 职场文书
中学生学雷锋演讲稿
2014/04/26 职场文书
中学生运动会口号
2014/06/07 职场文书
巾帼志愿者活动方案
2014/08/17 职场文书
师德师风剖析材料
2014/09/30 职场文书
解除施工合同协议书
2014/10/17 职场文书
如何书写先进事迹材料?
2019/07/02 职场文书