angular1双向绑定原理

1.脏检查循环触发时机

angular并不存在定时脏检查
angular对常用的dom事件,xhq事件作了封装,如果调用这些封装,就会在里面触发进入angular的digest流程,主要有以下情况:

  • DOM事件,如用户输入文本,点击按钮等,(ng-click)
  • XHQ响应事件($http)
  • 浏览器Location变更事件,即Url中hash部分变更($location)
  • Timer事件(Timeout,interval)
  • 手动调用apply或digest

2.scope作用域对象

  • 在作用域上添加数据本身不会有性能折扣,angular的脏检查循环遍历的是监听器列表,而不是作用域的属性
  • digest会调用每一个监控函数,最好关心监听器的数量和监控函数的性能

3.$digest脏检查循环

  • 脏检查循环检查出监控数据有变化时会再次运行,直到监控数据没有发生变化为止
  • 如果一个监听函数改变另一个监控变量,而另一个监听函数反过来改变这个监控变量,则会造成无限循环,需要给脏检查循环设置一个次数上限
  • angular默认不使用基于值的脏检查,因为检查值需要遍历嵌套的数据结构,深拷贝的数据也很占用内存
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.类库( 提供类方法 ) 和框架 类库提供一系列的函数和方法的合集,能够加快你写代码的速度。但是主导逻辑的还是自...
    w_zhuan阅读 5,798评论 0 8
  • 1、angularjs的几大特性是什么? 双向数据绑定、依赖注入、模板、指令、MVC/MVVM 2、列举几种常见的...
    2e9a10d418ab阅读 5,190评论 0 10
  • 1、angularjs的几大特性是什么? 双向数据绑定、依赖注入、模板、指令、MVC/MVVM 2、列举几种常见的...
    秀才JaneBook阅读 5,408评论 0 22
  • 简书 首先在UITextField代理中 - (void)textFieldDidEndEditing:(UITe...
    Apple_JinlongLu阅读 5,237评论 1 2
  • 那个男孩,不是他,是他们。他们陪伴我的这些年就变成了他。 他是我爱过的男孩子,爱上我的男孩子还有一直在背后无疾而终...
    垃圾日常阅读 2,523评论 0 1