Angular和Vue双向数据绑定的实现原理(重点是vue的双向绑定)


Posted in Javascript onNovember 22, 2016

我在整理javascript高级程序设计的笔记的时候看到面向对象设计那章,讲到对象属性分为数据属性和访问器属性,我们平时用的js对象90%以上都只是用到数据属性;我们向来讲解下数据属性和访问器属性到底是什么?

数据属性:数据属性包含一个数据值的位置,在这个位置可以读取和写入值.

访问器属性:访问器属性不包含数据值;他们包含一对getter和setter函数在读取访问器属性时,会调用getter函数,这个函数负责返回有效的值,在写入访问器属性时,会调用setter函数并传入新值.

这里介绍的重点是访问器属性,设置对象的访问器属性只能用es5的Object.defineProrerty()方法,如下例子:

var book={
_year:2004,
edition:1
};
Object.defineProperty(book,"year",{
get:function () {
return this._year
},
set:function (newValue) {
if(newValue>2004){
this._year=newValue;
this.edition+=newValue-2004;
}
}
});
book.year=2005;
alert(book.edition);//2
console.log(book.year);//2005

也就是当执行book.year=2005的时候其实是执行了year中的set方法,当执行book.year的时候执行了year的get方法;

var book={
_year:2004,
edition:1
};
Object.defineProperty(book,"year",{
get:function () {
console.log("year get")
return this._year
},
set:function (newValue) {
console.log("year set")
if(newValue>2004){
this._year=newValue;
this.edition+=newValue-2004;
}
}
});
book.year=2005;
alert(book.year);

控制台的提示是:

Angular和Vue双向数据绑定的实现原理(重点是vue的双向绑定)

这个原理就是vue双向数据绑定的原理,我们在vue组件中的data声明属性数据的时候其实在对象中的已经将这个属性封装成了访问器属性.

Angular和Vue双向数据绑定的实现原理(重点是vue的双向绑定)

每个属性都有get和set方法,在做双向的数据的控制都在get和set方法中,因为无论你是在ready(2.0是mounted了)或是在view中改变值都会触发set方法,将新值复制进去,在重新在view中匹配值,当然你们有更复杂的控制操作,get方法着是让ready中获取的这个属性值一直保存最新值.

angular1的双向数据绑定是脏数据监测,简单点说就是监测新值和旧值有没有变化,这种方式就要定时监测了咯.两种性能的消耗感觉不在一个层次上的啊.

就好比用html5 Sockets做后台主动消息推送前端和用js定时器每个5秒发送请求到后台捕获消息的性能差距一样.

还有之前写的js面向对象分层的思想其实也可以用在vue项目中,以前我一直以为vue的data层其实就是个摆设,但在api发现computed属性之后data层完全可以实现发送ajax取数功能,没必要在全都放到ready(2.0是mounted了)里面,这个ready(2.0是mounted了)可以只负责数据格式出来,或者控制页面的动态效果而已.这js的结构就像后台MVC那样层次功能分明清晰.这也只是我突然想到的思路还没真正应用到实际项目中,只是给在用vue的朋友提供个思路.

import data from '../assets/js/data'
export default{
data(){
return{
menu:data.menu,
inde:"",
row:"",
clomu:""
}
},
computed:{
isfull:function () {
alert(111);
return 11;
}
},
mounted(){
},
methods:{
domclick:function (i) {
if(this.inde===i){
this.inde="";
}else {
this.inde = i;
}
},
subclick:function (i,o) {
this.row=i;
this.clomu=o;
}
}
}

以上所述是小编给大家介绍的Angular和Vue双向数据绑定的实现原理(重点是vue的双向绑定),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
firefo xml 读写实现js代码
Jun 11 Javascript
javascript实现的在当前窗口中漂浮框的代码
Mar 15 Javascript
JS面向对象编程之对象使用分析
Aug 19 Javascript
jQuery中parents()和parent()的区别分析
Oct 28 Javascript
【经典源码收藏】基于jQuery的项目常见函数封装集合
Jun 07 Javascript
KnockoutJS 3.X API 第四章之表单textInput、hasFocus、checked绑定
Oct 11 Javascript
微信小程序在地图选择地址并返回经纬度简单示例
Dec 03 Javascript
解决layui的使用以及针对select、radio等表单组件不显示的问题
Sep 05 Javascript
如何正确理解vue中的key详解
Nov 02 Javascript
element-ui封装一个Table模板组件的示例
Jan 04 Javascript
mapboxgl实现带箭头轨迹线的代码
Jan 04 Javascript
vue实现验证用户名是否可用
Jan 20 Vue.js
AngularJS全局scope与Isolate scope通信用法示例
Nov 22 #Javascript
基于js实现checkbox批量选中操作
Nov 22 #Javascript
BootStrap中关于Select下拉框选择触发事件及扩展
Nov 22 #Javascript
基于jquery实现的银行卡号每隔4位自动插入空格的实现代码
Nov 22 #Javascript
详解Js模板引擎(TrimPath)
Nov 22 #Javascript
使用JS批量选中功能实现更改数据库中的status状态值(批量展示)
Nov 22 #Javascript
AngularJS中指令的四种基本形式实例分析
Nov 22 #Javascript
You might like
PHP技术开发技巧分享
2010/03/23 PHP
队列在编程中的实际应用(php)
2010/09/04 PHP
PHP中PDO的事务处理分析
2016/04/07 PHP
thinkPHP实现的联动菜单功能详解
2017/05/05 PHP
PHP中md5()函数的用法讲解
2019/03/30 PHP
JS获取scrollHeight问题想到的标准问题
2007/05/27 Javascript
一个原生的用户等级的进度条
2010/07/03 Javascript
基于json的jquery地区联动效果代码
2011/07/06 Javascript
ExtJs Excel导出并下载IIS服务器端遇到的问题
2011/09/16 Javascript
jquery简单瀑布流实现原理及ie8下测试代码
2013/01/23 Javascript
jquery $(document).ready()和window.onload的区别浅析
2015/02/04 Javascript
JavaScript之AOP编程实例
2015/07/17 Javascript
JavaScript基础知识点归纳(推荐)
2016/07/09 Javascript
原生JavaScript制作计算器
2016/10/16 Javascript
Bootstrap学习笔记之环境配置(1)
2016/12/07 Javascript
用nodejs搭建websocket服务器
2017/01/23 NodeJs
浅析Vue自定义组件的v-model
2017/11/26 Javascript
vue+iview+less+echarts实战项目总结
2018/02/22 Javascript
快速解决angularJS中用post方法时后台拿不到值的问题
2018/08/14 Javascript
详解微信小程序的 request 封装示例
2018/08/21 Javascript
Vue项目前后端联调(使用proxyTable实现跨域方式)
2020/07/18 Javascript
[58:35]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.22
2019/09/05 DOTA
python xml.etree.ElementTree遍历xml所有节点实例详解
2016/12/04 Python
在Django同1个页面中的多表单处理详解
2017/01/25 Python
python Opencv将图片转为字符画
2021/02/19 Python
Python 实现取矩阵的部分列,保存为一个新的矩阵方法
2018/11/14 Python
python将txt文件读取为字典的示例
2018/12/22 Python
Python3.5内置模块之time与datetime模块用法实例分析
2019/04/27 Python
详解Python3 对象组合zip()和回退方式*zip
2019/05/15 Python
tensorflow 实现从checkpoint中获取graph信息
2020/02/10 Python
Django QuerySet查询集原理及代码实例
2020/06/13 Python
Django生成数据库及添加用户报错解决方案
2020/10/09 Python
某/etc/fstab文件中的某行如下: /dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2 请解释其含义
2013/04/11 面试题
金融专业应届生求职信
2013/11/02 职场文书
竞选班干部演讲稿
2014/04/24 职场文书
2015年城管个人工作总结范文
2015/04/20 职场文书