您的位置:首页 > Web前端 > AngularJS

Angular   apply使用的场景

2014-11-10 11:46 495 查看
Angular 更新绑定的原理?
1)先来说说,angular是怎么知道变量发生了改变:
脏检查,将原对象复制一份快照,在某个时间,比较现在对象与快照的值,如果不一样就表明发生变化;

2) 很明显,这个策略要保留两份变量,而且要遍历对象,比较每个属性,这样不会有性能问题吗?
.) 首先是脏检查的对象:
angualar不会脏检查所有的对象,当对象被绑定到html中,这个对象添加为检查对象;
angular不会脏检查所有的属性,同样当属性被绑定后,这个属性会被列为检查的属性;

.)其次就是什么时候去脏检查
angular在我们所写的绝大部分代码中都会触发比较事件。
比如:controller 初始化的时候,
ng-click事件和所有以ng-开头的事件执行后,
$http 回调完成后,都会触发脏检查。
当然,触发脏检查的点是在函数执行完之后,但不表明异步调用也执行完成,
所以,如果我们的功能是异步的,那你会发现我们的改变并没有更新到dom上.
这就是 $apply的应用场景,使用$scope.$apply()手动触发脏检查
.)apply()接受一个function的参数,function中被绑定的对象会被脏检查,function不能是异步的哦;
.)$apply()不带参数时,会将当前作用域的所有监听对象都脏检查一遍,所以不带参数是有害的, 必然会做很多无用的脏检查,浪费性能
.) 再次就是如何脏检查
脏检查是由 $digest() 完成,$apply()被调用之后,最终会触发 $digest();
http://my.oschina.net/gejiawen0913/blog/187349
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  angular apply digest
相关文章推荐