轻松理解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在IE下使用未闭合的xml代码创建元素时的Bug介绍
Jan 10 Javascript
基于JQuery制作可编辑的表格特效
Dec 23 Javascript
JS实现黑色大气的二级导航菜单效果
Sep 18 Javascript
JavaScript实现的MD5算法完整实例
Feb 02 Javascript
jquery插件autocomplete用法示例
Jul 01 Javascript
jq实现左滑显示删除按钮,点击删除实现删除数据功能(推荐)
Aug 23 Javascript
完美解决jQuery 鼠标快速滑过后,会执行多次滑出的问题
Dec 08 Javascript
JavaScript之json_动力节点Java学院整理
Jun 29 Javascript
解决ng-repeat产生的ng-model中取不到值的问题
Oct 02 Javascript
详解vue中使用vue-quill-editor富文本小结(图片上传)
Apr 24 Javascript
js实现简单的秒表
Jan 16 Javascript
vuex中遇到的坑,vuex数据改变,组件中页面不渲染操作
Nov 16 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学习 运算符与运算符优先级
2008/06/15 PHP
PHP正则的Unknown Modifier错误解决方法
2010/03/02 PHP
PHP使用DES进行加密与解密的方法详解
2013/06/06 PHP
ThinkPHP基于PHPExcel导入Excel文件的方法
2014/10/15 PHP
php使用NumberFormatter格式化货币的方法
2015/03/21 PHP
常见PHP数据库解决方案分析介绍
2015/09/24 PHP
PHP中file_exists使用中遇到的问题小结
2016/04/05 PHP
PHP正则之正向预查与反向预查讲解与实例
2020/04/06 PHP
JavaScript 继承的实现
2009/07/09 Javascript
JS 控制CSS样式表
2009/08/20 Javascript
jQuery validate 中文API 附validate.js中文api手册
2010/07/31 Javascript
用dtree实现树形菜单 dtree使用说明
2011/10/17 Javascript
jquery写个checkbox——类似邮箱全选功能
2013/03/19 Javascript
JavaScript数值转换的三种方式总结
2014/07/31 Javascript
javascript中this的四种用法
2015/05/11 Javascript
js实现仿阿里巴巴城市选择框效果实例
2015/06/24 Javascript
动态的9*9乘法表效果的实现代码
2016/05/16 Javascript
解决Layui 表单提交数据为空的问题
2018/08/15 Javascript
浅谈微信小程序flex布局基础
2018/09/10 Javascript
layui导出所有数据的例子
2019/09/10 Javascript
Ajax获取node服务器数据的完整步骤
2020/09/20 Javascript
python中偏函数partial用法实例分析
2015/07/08 Python
Python使用三种方法实现PCA算法
2017/12/12 Python
Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容
2018/02/23 Python
django 多数据库配置教程
2018/05/30 Python
selenium+python截图不成功的解决方法
2019/01/30 Python
详解python路径拼接os.path.join()函数的用法
2019/10/09 Python
pyecharts绘制中国2020肺炎疫情地图的实例代码
2020/02/12 Python
需要知道的CSS3动画技术
2010/01/01 HTML / CSS
HTML5 使用 sessionStorage 进行页面传值的方法
2018/07/02 HTML / CSS
天美时手表加拿大官网:Timex加拿大
2016/09/01 全球购物
2014年党员自我评议对照检查材料
2014/09/20 职场文书
兵马俑导游词
2015/02/02 职场文书
物业工程部经理岗位职责
2015/04/09 职场文书
python获取对象信息的实例详解
2021/07/07 Python
SpringBoot接入钉钉自定义机器人预警通知
2022/07/15 Java/Android