轻松理解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 相关文章推荐
for 循环性能比较 提高for循环的效率
Mar 19 Javascript
javascript 获取url参数和script标签中获取url参数函数代码
Jan 22 Javascript
JavaScript 面向对象编程(1) 基础
May 18 Javascript
使用mouse事件实现简单的鼠标经过特效
Jan 30 Javascript
Jil,高效的json序列化和反序列化库
Feb 15 Javascript
js常用的继承--组合式继承
Mar 06 Javascript
vue项目中api接口管理总结
Apr 20 Javascript
Vuex 单状态库与多模块状态库详解
Dec 11 Javascript
详解基于vue-cli3快速发布一个fullpage组件
Mar 08 Javascript
vue.js+elementUI实现点击左右箭头切换头像功能(类似轮播图效果)
Sep 05 Javascript
JavaScript(js)处理的HTML事件、键盘事件、鼠标事件简单示例
Nov 19 Javascript
angular8和ngrx8结合使用的步骤介绍
Dec 01 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
国王的咖啡这么大来头,名字的由来是什么
2021/03/03 咖啡文化
PHP.MVC的模板标签系统(五)
2006/09/05 PHP
php使用filter过滤器验证邮箱 ipv6地址 url验证
2013/12/25 PHP
php中的路径问题与set_include_path使用介绍
2014/02/11 PHP
php基于表单密码验证与HTTP验证用法实例
2015/01/06 PHP
PHP+MySQL高并发加锁事务处理问题解决方法
2018/04/30 PHP
javascript 支持ie和firefox杰奇翻页函数
2008/07/22 Javascript
基于jQuery实现图片的前进与后退功能
2013/04/24 Javascript
文本框回车提交与禁止提交示例
2013/09/27 Javascript
扩展Bootstrap Tooltip插件使其可交互的方法
2016/11/07 Javascript
JS实现的简单表单验证功能完整实例
2017/10/14 Javascript
Angular中使用MathJax遇到的一些问题
2017/12/15 Javascript
jQuery中可见性过滤器简单用法示例
2018/03/31 jQuery
jQuery easyui datagird编辑行删除行功能的实现代码
2018/09/20 jQuery
微信小程序学习笔记之函数定义、页面渲染图文详解
2019/03/28 Javascript
layui问题之模拟table表格中的选中按钮选中事件的方法
2019/09/20 Javascript
redux处理异步action解决方案
2020/03/22 Javascript
django基础之数据库操作方法(详解)
2017/05/24 Python
好的Python培训机构应该具备哪些条件
2018/05/23 Python
Python数据类型之String字符串实例详解
2019/05/08 Python
Python检测数据类型的方法总结
2019/05/20 Python
python挖矿算力测试程序详解
2019/07/03 Python
python将三维数组展开成二维数组的实现
2019/11/30 Python
Django 限制访问频率的思路详解
2019/12/24 Python
Tensorflow安装问题: Could not find a version that satisfies the requirement tensorflow
2020/04/20 Python
葡萄牙鞋子品牌:Fair
2016/12/10 全球购物
洛杉矶生活休闲而精致的基础品牌:Mika Jaymes
2018/01/07 全球购物
Merrell美国官网:美国登山运动鞋品牌
2018/02/07 全球购物
欧姆龙医疗欧洲有限公司:Omron Healthcare Europe B.V
2020/06/13 全球购物
Android笔试题总结
2014/11/29 面试题
恒华伟业笔试面试题
2015/02/26 面试题
办公室岗位职责
2014/02/12 职场文书
2015年领班工作总结
2015/04/29 职场文书
独生子女证明范本
2015/06/19 职场文书
vue @click.native 绑定原生点击事件
2022/04/22 Vue.js
MySQL约束(创建表时的各种条件说明)
2022/06/21 MySQL