轻松理解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 相关文章推荐
jquery pagination插件实现无刷新分页代码
Oct 13 Javascript
EasyUI的treegrid组件动态加载数据问题的解决办法
Dec 11 Javascript
javascript面向对象之对象的深入理解
Jan 13 Javascript
JavaScript实现仿新浪微博大厅和腾讯微博首页滚动特效源码
Sep 15 Javascript
封装好的javascript前端分页插件pagination
Jan 04 Javascript
jQuery中delegate()方法的用法详解
Oct 13 Javascript
Zepto实现密码的隐藏/显示
Apr 07 Javascript
JavaScript生成简单等差数列
Nov 28 Javascript
JavaScript体验异步更好的解决办法
Jan 08 Javascript
JavaScript实现随机五位数验证码
Sep 27 Javascript
vue父子组件间引用之$parent、$children
May 20 Javascript
JavaScript数组常用的增删改查与其他属性详解
Oct 13 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
Zend Studio for Eclipse的java.lang.NullPointerException错误的解决方法
2008/12/06 PHP
ThinkPHP实现动态包含文件的方法
2014/11/29 PHP
php生成高清缩略图实例详解
2015/12/07 PHP
PHP 设计模式系列之 specification规格模式
2016/01/10 PHP
php+ajax 文件上传代码实例
2019/03/18 PHP
正则表达式中特殊符号及正则表达式的几种方法总结(replace,test,search)
2013/11/26 Javascript
纯js实现重发验证码按钮倒数功能
2015/04/21 Javascript
JavaScript中对DOM节点的访问、创建、修改、删除
2015/11/16 Javascript
nodejs如何获取时间戳与时间差
2016/08/03 NodeJs
jQuery实现表格奇偶行显示不同背景色 就这么简单
2017/03/13 Javascript
jQuery插件FusionCharts实现的MSBar2D图效果示例【附demo源码】
2017/03/24 jQuery
JS实现动态给标签控件添加事件的方法示例
2017/05/13 Javascript
bootstrap-table组合表头的实现方法
2017/09/07 Javascript
详解Koa中更方便简单发送响应的方式
2018/07/20 Javascript
Vue官方推荐AJAX组件axios.js使用方法详解与API
2018/10/09 Javascript
详解JS实现简单的时分秒倒计时代码
2019/04/25 Javascript
Vue中util的工具函数实例详解
2019/07/08 Javascript
vue2.0项目集成Cesium的实现方法
2019/07/30 Javascript
微信小程序 下拉刷新及上拉加载原理解析
2019/11/06 Javascript
Vue过渡效果之CSS过渡详解(结合transition,animation,animate.css)
2020/02/05 Javascript
javascript实现移动端触屏拖拽功能
2020/07/29 Javascript
解决Vue keep-alive 调用 $destory() 页面不再被缓存的情况
2020/10/30 Javascript
python实现聚类算法原理
2018/02/12 Python
Python FTP两个文件夹间的同步实例代码
2018/05/25 Python
在python 不同时区之间的差值与转换方法
2019/01/14 Python
用scikit-learn和pandas学习线性回归的方法
2019/06/21 Python
Django如何批量创建Model
2020/09/01 Python
Linux文件操作命令都有哪些
2015/02/27 面试题
护理自荐信范文
2013/10/05 职场文书
4s店总经理岗位职责
2013/12/31 职场文书
大学生怎样写好自荐信
2014/02/25 职场文书
主管会计岗位职责
2014/03/13 职场文书
2014保险公司内勤工作总结
2014/12/16 职场文书
毕业生党员个人总结
2015/02/14 职场文书
公司人事管理制度
2015/08/05 职场文书
苹果电脑mac os中货币符号快捷输入
2022/02/17 杂记