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 相关文章推荐
jquery 按钮状态效果 正常、移上、按下
Aug 12 Javascript
js/jquery解析json和数组格式的方法详解
Jan 09 Javascript
运行Node.js的IIS扩展iisnode安装配置笔记
Mar 02 Javascript
JavaScript中toString()方法的使用详解
Jun 05 Javascript
JQuery Mobile 弹出式登录框的实现方法
May 28 Javascript
JS表单数据验证的正则表达式(常用)
Feb 18 Javascript
详解jQuery中关于Ajax的几个常用的函数
Jul 17 jQuery
React Form组件的实现封装杂谈
May 07 Javascript
Vue3.0数据响应式原理详解
Oct 09 Javascript
JavaScript实现左右滚动电影画布
Feb 06 Javascript
JavaScript实现随机点名程序
Mar 25 Javascript
jquery html添加元素/删除元素操作实例详解
May 20 jQuery
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
一个简单的自动发送邮件系统(三)
2006/10/09 PHP
PHP5各个版本的新功能和新特性总结
2014/03/16 PHP
PHP使用mysqli操作MySQL数据库的简单方法
2017/02/04 PHP
javascript 单选框,多选框美化代码
2008/08/01 Javascript
jQuery第三课 修改元素属性及内容的代码
2010/03/14 Javascript
Javascript连接多个数组不用concat来解决
2014/03/24 Javascript
node.js中的console.trace方法使用说明
2014/12/09 Javascript
JS实现兼容各浏览器解析XML文档数据的方法
2015/06/01 Javascript
JS正则匹配中文的方法示例
2017/01/06 Javascript
JS实现数组去重复值的方法示例
2017/02/18 Javascript
Easyui使用Dialog行内按钮布局的实例
2017/07/27 Javascript
对node通过fs模块判断文件是否是文件夹的实例讲解
2019/06/10 Javascript
Layui数据表格之单元格编辑方式
2019/10/26 Javascript
利用js canvas实现五子棋游戏
2020/10/11 Javascript
详解Vue3.0 + TypeScript + Vite初体验
2021/02/22 Vue.js
[03:54]DOTA2英雄梦之声_第06期_昆卡
2014/06/23 DOTA
Python常用模块介绍
2014/11/21 Python
python 上下文管理器使用方法小结
2017/10/10 Python
django自带的server 让外网主机访问方法
2018/05/14 Python
基于python绘制科赫雪花
2018/06/22 Python
PyQt5的PyQtGraph实践系列3之实时数据更新绘制图形
2019/05/13 Python
在pandas中遍历DataFrame行的实现方法
2019/10/23 Python
Python类反射机制使用实例解析
2019/12/30 Python
Django框架之中间件MiddleWare的实现
2019/12/30 Python
Python批量启动多线程代码实例
2020/02/18 Python
Zalando Lounge瑞士:时尚与生活方式购物俱乐部
2020/03/12 全球购物
数字化校园建设方案
2014/05/03 职场文书
英文求职信范文
2014/05/23 职场文书
酒店工程部岗位职责
2015/02/12 职场文书
创先争优活动个人总结
2015/03/04 职场文书
年底个人总结范文
2015/03/10 职场文书
催款通知书范文
2015/04/17 职场文书
2015秋季运动会通讯稿
2015/07/18 职场文书
人力资源部工作计划
2019/05/14 职场文书
关于食品安全的演讲稿范文(三篇)
2019/10/21 职场文书
动画电影《龙珠超 超级英雄》延期上映
2022/03/20 日漫