如何在Angular2中实现diagest循环机制,例如:$ scope是单个对象,它继续观察其子元素并触发更改如何angular2用$ scope
完成此操作答案 0 :(得分:2)
在Angular中, change detection
的概念是自动的。没有$ scope,因此在 $scope.$watch()
和 $scope.$digest()
不再是。
您可以在 Change Detection
上阅读更多内容。
答案 1 :(得分:1)
在AngularJS中,大多数组件/指令都与$scope
相关联。每个$scope
都附有一组监视功能。这些监视功能执行某些任务,但最重要的任务可能是通过插值{{...}}
语法或ng-bind
指令添加的DOM更新。因此,假设您有3个组件/指令形成$scopes
的层次结构:
AComponentScope
BComponentScope
CComponentScope
因此,当AngularJS运行$digest
时,它首先触发观察者更新AComponentScope
的DOM,然后更新BComponentScope
,然后更新CComponentScope
。
在Angular中,还有一项任务是更新DOM,作为更改检测/摘要的一部分。此任务由基于模板为每个组件生成的updateRenderer函数执行。因此,当Angular运行更改检测时,它会像在AngularJS中一样递归地触发每个组件的函数。唯一的区别是这个过程只从上到下发生一次,而在AngularJS中,这个过程最多可能发生10次。
有关更多信息,请阅读以下文章:
答案 2 :(得分:0)
如果您还对Angular默认更改检测机制有疑问,请尝试此操作。就我而言,在我的ionic4项目中,Angular的默认更改机制无法正常运行,因此我手动触发了它。
constructor(private ref: ChangeDetectorRef) {
ref.detach();
setInterval(() => {
this.ref.detectChanges();
}, 500);
}