轻松理解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 TextArea动态显示剩余字符
Oct 22 Javascript
JavaScript与DOM组合动态创建表格实例
Dec 23 Javascript
jquery创建一个新的节点对象(自定义结构/内容)的好方法
Jan 21 Javascript
如何在父窗口中得知window.open()出的子窗口关闭事件
Oct 15 Javascript
jQuery实现高亮显示的方法
Mar 10 Javascript
如何用JavaScript实现动态修改CSS样式表
May 20 Javascript
JS组件系列之使用HTML标签的data属性初始化JS组件
Sep 14 Javascript
基于jquery实现的银行卡号每隔4位自动插入空格的实现代码
Nov 22 Javascript
微信小程序侧边栏滑动特效(左右滑动)
Jan 23 Javascript
手机端转换rem适应
Apr 01 Javascript
Vue多种方法实现表头和首列固定的示例代码
Feb 02 Javascript
Vue实现简易购物车页面
Dec 30 Vue.js
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 强制性文件下载功能的函数代码(任意文件格式)
2010/05/26 PHP
php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法
2013/09/28 PHP
Sample script that deletes a SQL Server database
2007/06/16 Javascript
BOM与DOM的区别分析
2010/10/26 Javascript
jquery实现类似EasyUI的页面布局可改变左右的宽度
2020/09/12 Javascript
在Ubuntu上安装最新版本的Node.js
2014/07/14 Javascript
jquery实现简易的移动端验证表单
2015/11/08 Javascript
js控制文本框只能输入中文、英文、数字与指定特殊符号的实现代码
2016/09/09 Javascript
详解Weex基于Vue2.0开发模板搭建
2017/03/20 Javascript
Vue.js 插件开发详解
2017/03/29 Javascript
JS实现前端缓存的方法
2017/09/21 Javascript
layui.js实现的表单验证功能示例
2017/11/15 Javascript
Angular4 组件通讯方法大全(推荐)
2018/07/12 Javascript
微信小程序获取用户信息的两种方法wx.getUserInfo与open-data实例分析
2019/05/03 Javascript
javascript触发模拟鼠标点击事件
2019/06/26 Javascript
逐行分析鸿蒙系统的 JavaScript 框架(推荐)
2020/09/17 Javascript
Python向日志输出中添加上下文信息
2017/05/24 Python
对numpy中数组元素的统一赋值实例
2018/04/04 Python
Python开发虚拟环境使用virtualenvwrapper的搭建步骤教程图解
2018/09/19 Python
python导入不同目录下的自定义模块过程解析
2019/11/18 Python
解决Pytorch 加载训练好的模型 遇到的error问题
2020/01/10 Python
使用python编写一个语音朗读闹钟功能的示例代码
2020/07/14 Python
对Pytorch 中的contiguous理解说明
2021/03/03 Python
Expedia英国:全球最大的在线旅游公司
2017/09/07 全球购物
元旦红领巾广播稿
2014/02/19 职场文书
《少年王冕》教学反思
2014/04/11 职场文书
学习“七一”讲话精神体会
2014/07/08 职场文书
大学奖学金获奖感言
2014/08/15 职场文书
党委班子纠正“四风”问题整改措施
2014/10/28 职场文书
大学生党性分析材料
2014/12/19 职场文书
上课迟到检讨书范文
2015/05/06 职场文书
2016年党员学习廉政准则心得体会
2016/01/20 职场文书
详解Redis瘦身指南
2021/05/26 Redis
记一次Mysql不走日期字段索引的原因小结
2021/10/24 MySQL
前端JavaScript大管家 package.json
2021/11/02 Javascript
win11高清晰音频管理器在哪里?win11找不到高清晰音频管理器解决办法
2022/04/08 数码科技