轻松理解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 相关文章推荐
javascript的onchange事件与jQuery的change()方法比较
Sep 28 Javascript
JQUBar 基于JQUERY的柱状图插件
Nov 23 Javascript
Js 冒泡事件阻止实现代码
Jan 27 Javascript
jquery触发a标签跳转事件示例代码
Jul 21 Javascript
jquery与prototype框架的详细对比
Nov 21 Javascript
jquery ui bootstrap 实现自定义风格
Nov 14 Javascript
Vue键盘事件用法总结
Apr 18 Javascript
JS中移除非数字最多保留一位小数
May 09 Javascript
jQuery实现鼠标移到某个对象时弹出显示层功能
Aug 23 jQuery
vue-cli3 配置开发与测试环境详解
May 17 Javascript
vue 地图可视化 maptalks 篇实例代码详解
May 21 Javascript
jquery 回调操作实例分析【回调成功与回调失败的情况】
Sep 27 jQuery
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缓存类代码(附详细说明)
2011/06/09 PHP
解析phpstorm + xdebug 远程断点调试
2013/06/20 PHP
关于IE7 IE8弹出窗口顶上
2008/12/22 Javascript
JQuery CSS样式控制 学习笔记
2009/07/23 Javascript
js中将具有数字属性名的对象转换为数组
2011/03/06 Javascript
jquery 图片上传按比例预览插件集合
2011/05/28 Javascript
JavaScript 产生不重复的随机数三种实现思路
2012/12/13 Javascript
JavaScript中的关键字&quot;VAR&quot;使用详解 分享
2013/07/31 Javascript
jquery常用操作小结
2014/07/21 Javascript
Egret引擎开发指南之创建项目
2014/09/03 Javascript
jQuery模仿京东/天猫商品左侧分类导航菜单效果
2016/06/29 Javascript
jQuery实现表格行和列的动态添加与删除方法【测试可用】
2016/08/01 Javascript
基于JavaScript实现添加到购物车效果附源码下载
2016/08/22 Javascript
JavaScript与java语言有什么不同
2016/09/22 Javascript
浅谈Node.js:Buffer模块
2016/12/05 Javascript
vue中element组件样式修改无效的解决方法
2018/02/03 Javascript
详解使用create-react-app快速构建React开发环境
2018/05/16 Javascript
使用vue重构资讯页面的实例代码解析
2019/11/26 Javascript
JS禁用右键、禁用Ctrl+u、禁用Ctrl+s、禁用F12的实现代码
2020/12/01 Javascript
[50:28]LGD女子学院第三期 DOTA2复仇之魂教学
2013/12/24 DOTA
Python数组遍历的简单实现方法小结
2016/04/27 Python
浅谈python字符串方法的简单使用
2016/07/18 Python
对tf.reduce_sum tensorflow维度上的操作详解
2018/07/26 Python
解决python ogr shp字段写入中文乱码的问题
2018/12/31 Python
Python实现Mysql数据统计及numpy统计函数
2019/07/15 Python
opencv之为图像添加边界的方法示例
2019/12/26 Python
在ipython notebook中使用argparse方式
2020/04/20 Python
波兰在线儿童和婴儿用品零售商:pinkorblue
2019/06/29 全球购物
自主招生自荐信格式
2013/12/03 职场文书
文明演讲稿范文
2014/05/12 职场文书
战略性融资合作协议书范本
2014/10/17 职场文书
2014年党总支工作总结
2014/12/18 职场文书
自我检讨书怎么写
2015/05/07 职场文书
给学校的建议书400字
2015/09/14 职场文书
Z-Order加速Hudi大规模数据集方案分析
2022/03/31 Servers
vue3引入highlight.js进行代码高亮的方法实例
2022/04/08 Vue.js