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 序列化对象实现代码
Dec 18 Javascript
jquery中ajax学习笔记4
Oct 16 Javascript
解析JavaScript中的不可见数据类型
Dec 02 Javascript
javascript使用onclick事件改变选中行的颜色
Dec 30 Javascript
7个JS基础知识总结
Mar 05 Javascript
jQuery文本框得到与失去焦点动态改变样式效果
Sep 08 Javascript
JavaScript利用Date实现简单的倒计时实例
Jan 12 Javascript
实例详解ztree在vue项目中使用并且带有搜索功能
Aug 24 Javascript
vue-cli3.0如何使用CDN区分开发、生产、预发布环境
Nov 22 Javascript
VUE实现密码验证与提示功能
Oct 18 Javascript
python虚拟环境 virtualenv的简单使用
Jan 21 Javascript
Vue Router 实现动态路由和常见问题及解决方法
Mar 06 Javascript
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
Apache设置虚拟WEB
2006/10/09 PHP
PHP系统流量分析的程序
2006/10/09 PHP
php结合ajax实现赞、顶、踩功能实例
2014/05/12 PHP
php对xml文件的增删改查操作实现方法分析
2017/05/19 PHP
基于PHP实现栈数据结构和括号匹配算法示例
2017/08/10 PHP
用YUI做了个标签浏览效果
2007/02/20 Javascript
javascript下有关dom以及xml节点访问兼容问题
2007/11/26 Javascript
10个新的最有前途的JavaScript框架
2009/03/12 Javascript
javascript中定义私有方法说明(private method)
2014/01/27 Javascript
jQuery新的事件绑定机制on()示例应用
2014/07/18 Javascript
js方法数据验证的简单实例
2016/09/17 Javascript
浅谈jquery采用attr修改form表单enctype不起作用的问题
2016/11/25 Javascript
zTree实现节点修改的实时刷新功能
2017/03/20 Javascript
JS实现HTML页面中动态显示当前时间完整示例
2018/07/30 Javascript
详解Angular中通过$location获取地址栏的参数
2018/08/02 Javascript
JQuery的加载和选择器用法简单示例
2019/05/13 jQuery
p5.js绘制创意自画像
2019/11/04 Javascript
Vue实现跑马灯效果
2020/05/25 Javascript
vue缓存之keep-alive的理解和应用详解
2020/11/02 Javascript
python 安装virtualenv和virtualenvwrapper的方法
2017/01/13 Python
Python实现绘制双柱状图并显示数值功能示例
2018/06/23 Python
Python 给某个文件名添加时间戳的方法
2018/10/16 Python
python中ImageTk.PhotoImage()不显示图片却不报错问题解决
2018/12/06 Python
python+pyqt5编写md5生成器
2019/03/18 Python
使用pycharm在本地开发并实时同步到服务器
2019/08/02 Python
CSS3 选择器 属性选择器介绍
2012/01/21 HTML / CSS
浅谈HTML5中dialog元素尝鲜
2018/10/15 HTML / CSS
基于Python 函数和方法的区别说明
2021/03/24 Python
汽车销售顾问求职自荐信
2014/01/01 职场文书
文明礼仪小标兵事迹
2014/01/12 职场文书
银行进社区活动总结
2014/07/07 职场文书
班主任高考寄语
2015/02/26 职场文书
汽车4S店前台接待岗位职责
2015/04/03 职场文书
2015年党员岗位承诺书
2015/04/27 职场文书
简单实现一个手持弹幕功能+文字抖动特效
2021/03/31 HTML / CSS
画错魏国疆域啦!《派对咖孔明》动画因作画失误于官网致歉
2022/04/07 日漫