1

考虑以下组件树结构Angular2

    A
  B 
D  E  

如果D通过 click to 发出事件Bangular2将自动从 root 开始更改检测Aconsole.log即使D没有直接向 发射事件,有没有办法检测到变化A

例如在D

html

<div (click)="update($event)"></div>

component

@Output() myOutputName = new EventEmitter();

update(event) {
    this.myOutputName.emit('some vlaue'); 
}

B

(myOutputName)="update($event)"

但如果B没有进一步推进该事件,我无法判断是否A正在运行其更改检测。

这样做的动机是找出哪个组件已在Change Detection运行以进行调试

4

1 回答 1

2

ngDoCheck()在每个组件上实施。它是一个生命周期钩子,每次在组件上运行更改检测时都会调用它。

另请参阅https://angular.io/docs/ts/latest/guide/lifecycle-hooks.html#!#docheck

但是请注意,仅仅因为该方法被调用并不一定意味着模板绑定已被检查更改。我相信(我可能是错的,这是从记忆中,当我前一段时间玩一个 plunker 时)即使第一个OnPush组件没有被标记, ngDoCheck()仍然被调用,但我不认为模板绑定被检查。此外,如果OnPush组件未标记为检查,ngDoCheck()则不会在后代组件上调用。

于 2016-04-08T18:02:57.033 回答