我们如何在没有直接@Output 的情况下检测到 Angular2 中的变更检测已 运行?
How do we detect that Change Detection is been ran in Angular2 without direct @Output?
考虑Angular2
中的以下组件树结构
A
B
D E
如果 D
通过单击 B
发出事件,angular2
将自动从根 A
开始更改检测。有没有办法 console.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
运行 用于调试目的
对每个组件实施 ngDoCheck()
。它是一个生命周期挂钩,每次在组件上运行更改检测时都会调用它。
另见 https://angular.io/docs/ts/latest/guide/lifecycle-hooks.html#!#docheck
但是请注意,仅仅因为调用了该方法并不一定意味着已经检查了模板绑定的更改。我相信(我可能是错的,这是我记忆中的,当我前一段时间玩一个 plunker 时)即使第一个 OnPush
组件没有被标记, ngDoCheck()
仍然被调用,但我不' 认为模板绑定已检查。此外,如果 OnPush
组件未标记为检查,则不会在后代组件上调用 ngDoCheck()
。
考虑Angular2
A
B
D E
如果 D
通过单击 B
发出事件,angular2
将自动从根 A
开始更改检测。有没有办法 console.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
运行 用于调试目的
对每个组件实施 ngDoCheck()
。它是一个生命周期挂钩,每次在组件上运行更改检测时都会调用它。
另见 https://angular.io/docs/ts/latest/guide/lifecycle-hooks.html#!#docheck
但是请注意,仅仅因为调用了该方法并不一定意味着已经检查了模板绑定的更改。我相信(我可能是错的,这是我记忆中的,当我前一段时间玩一个 plunker 时)即使第一个 OnPush
组件没有被标记, ngDoCheck()
仍然被调用,但我不' 认为模板绑定已检查。此外,如果 OnPush
组件未标记为检查,则不会在后代组件上调用 ngDoCheck()
。