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 相关文章推荐
javascript的键盘控制事件说明
Apr 15 Javascript
学习ExtJS TextField常用方法
Oct 07 Javascript
jquery和javascript的区别(常用方法比较)
Jul 04 Javascript
window.setInterval()方法的定义和用法及offsetLeft与style.left的区别
Nov 11 Javascript
jQuery EasyUI 菜单与按钮之创建简单的菜单和链接按钮
Nov 18 Javascript
微信小程序-消息提示框实例
Nov 24 Javascript
vue脚手架中配置Sass的方法
Jan 04 Javascript
vue观察模式浅析
Sep 25 Javascript
小程序云开发部署攻略(图文教程)
Oct 30 Javascript
详解VUE中的插值( Interpolation)语法
Oct 18 Javascript
vue实现树状表格效果
Dec 29 Vue.js
VUE实现吸底按钮
Mar 04 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运行速度的一些小技巧分享
2012/07/03 PHP
PHP图像裁剪缩略裁切类源码及使用方法
2016/01/07 PHP
jqPlot jquery的页面图表绘制工具
2009/07/25 Javascript
TBCompressor js代码压缩
2011/01/05 Javascript
JSDoc 介绍使用规范JsDoc的使用介绍
2011/02/12 Javascript
实现web打印的各种方法介绍及实现代码
2013/01/09 Javascript
jQuery 淡出一个图像到另一个图像的实现代码
2013/06/12 Javascript
js HTML5手机刮刮乐代码
2020/09/29 Javascript
jQuery实现圣诞节礼物传送(花式轮播)
2016/12/25 Javascript
js循环map 获取所有的key和value的实现代码(json)
2018/05/09 Javascript
js正则表达式校验指定字符串的方法
2018/07/23 Javascript
微信小程序wx.request拦截器使用详解
2019/07/09 Javascript
JS函数进阶之prototy用法实例分析
2020/01/15 Javascript
[01:12:53]完美世界DOTA2联赛PWL S2 Forest vs SZ 第一场 11.25
2020/11/26 DOTA
[46:44]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD BO3 第二场 3月7日
2021/03/11 DOTA
Python实现随机生成有效手机号码及身份证功能示例
2017/06/05 Python
python+ffmpeg视频并发直播压力测试
2018/03/06 Python
python3.4控制用户输入与输出的方法
2018/10/17 Python
记一次python 内存泄漏问题及解决过程
2018/11/29 Python
通过python3实现投票功能代码实例
2019/09/26 Python
Python通过TensorFLow进行线性模型训练原理与实现方法详解
2020/01/15 Python
python数据处理——对pandas进行数据变频或插值实例
2020/04/22 Python
django 实现后台从富文本提取纯文本
2020/07/02 Python
Python 读取位于包中的数据文件
2020/08/07 Python
python如何实现图片压缩
2020/09/11 Python
英国休闲奢华的缩影:Crew Clothing
2019/05/05 全球购物
日本乐天德国站:Rakuten.de
2019/05/16 全球购物
日本最大化妆品和美容产品的综合口碑网站:cosme shopping
2019/08/28 全球购物
项目考察欢迎辞
2014/01/17 职场文书
勾股定理课后反思
2014/04/26 职场文书
植树节口号
2014/06/21 职场文书
数学教研活动总结
2014/07/02 职场文书
2014年园林绿化工作总结
2014/12/11 职场文书
复活读书笔记
2015/06/29 职场文书
python 实现mysql自动增删分区的方法
2021/04/01 Python
Java 超详细讲解设计模式之中的抽象工厂模式
2022/03/25 Java/Android