angularJs-脏检查

angularJs-脏检查


scope是一个指向应用model的object,也是表达式的执行上下文。

scope被放置在一个类似应用的DOM结构的层次结构中


angular中变量是双向绑定的 ,那么怎么知道一个变量是否是变化了呢?

1能通过固定的接口才能改变变量的值,比如说只能通过set()设置变量的值,set被调用的时候比较一下就知道了。这种方法的缺点是写法比较繁琐。

2脏检查,将原对象复制一份快照,在某个时间,比较现在对象与快照的值,如果不一样就表明发生了变化,这个策略要保留两份变量,而且要遍历对象,比较每个属性,这样会有一定的性能问题

angular使用的就是脏检查:

1不会脏检查所有的对象。当对象被绑定到html中后,这个对象才会添加为检查对象(watcher)

2不会脏检查所有的属性,同样当属性被绑定后,这个属性才会被列为检查的属性

在angular程序初始化时,会将绑定的对象的属性添加为监听对象(watcher),也就是说一个对象绑定了N个属性,就会添加N个watcher。

angular什么时候去脏检查呢?angular所系统的方法中都会触发比较事件,比如:controller初始化的时候,所有以ng-开头的事件爱你执行后,都会出发脏检查

必要的时候我们要手动的触发脏检查:$apply仅仅只是进入angular context,然后通过$digest触发脏检查

$apply如果不给参数的话,会检查该$scope里的所有监听的属性,推荐给上参数


$apply实现脏检查实际上是通过$digest实现的,但是我们不能直接使用$digest来触发,原因是在$apply 与$digest之间还有一层很重要的$evel判断。如果中间有错误$evel将会把错误交送到$exceptionHandler进行处理

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 笔记类文章 angularJS Scope综述 于2017年1月14日 翻译自angularjs 官网开发者指南 ...
    布蕾布蕾阅读 4,298评论 0 1
  • Angular面试题 一、ng-show/ng-hide与ng-if的区别? 第一点区别是,ng-if在后面表达式...
    w_zhuan阅读 10,890评论 0 26
  • Vue 的一些语法和 Angular 的很相似(例如 v-if vs ng-if) 因为 Angular 是 Vu...
    LiLi原上草阅读 4,783评论 0 6
  • ——我与赵学民先生的近半世纪情谊—— 口述:马俊德 整理:W Q 从认识赵学民先生算起,已快半个世纪了。一路走...
    邓文伟阅读 4,402评论 0 1
  • 我凝视你 自卑吞噬了我 ...
    wwwar阅读 3,142评论 0 0