在Angular 1.x中,我可以使用。$ watch来观看我想要的任何东西,但是在Angular 2中我们有ngOnChanges,它非常酷且高性能,但只能监视输入和输出装饰器。但是我不时会看到本地属性,这样我就可以在它们发生变化时发出一个事件。我记得看到一篇文章解释了如何明确地告诉Angular 2观看单个属性,但对于我的生活,我再也找不到文章了,我所做的每一次搜索都告诉我使用带有onChanges的输入/输出装饰器。如何为@ViewChild或其他本地属性创建观察程序?
例如,我有一个ngForm,当它的验证状态从有效变为无效或反之亦然时,我想将状态发送到另一个组件,以便它可以做出反应。但是因为我的ngForm是@ViewChild而不是@Input或@Output ngOnChanges没有检测到更改。
答案 0 :(得分:11)
与Angular 2中的自定义Angular 1 $watch()
等价的是实现生命周期挂钩ngDoCheck()
并执行您自己的检查。 Lifecycle Hooks开发指南有an example。
请注意,每次更改检测运行时都会调用ngDoCheck()
方法(就像Angular 1手表一样),因此请确保它尽可能高效地实现。
尝试使用RxJS(Observable,Subject等),如果可能的话,因为它更有效。我们used to be able to subscribe to the NgForm's ControlGroup to be notified of changes,但我不知道这是否仍然可用。