在Angular 1.x中,我可以使用.$watch来观看我想要的任何东西,但是在Angular 2中我们有ngOnChanges,它非常酷且高性能,但只能监视输入和输出装饰器.但是我不时会看到本地属性,以便我可以在更改时发出事件.我记得看到一篇文章解释了如何明确地告诉Angular 2观看单个属性,但对于我的生活,我再也找不到文章了,我所做的每一次搜索都告诉我使用带有onChanges的输入/输出装饰器.如何为@ViewChild或其他本地属性创建观察程序?
例如,我有一个ngForm,当它的验证状态从有效变为无效或反之亦然时,我想将状态发送到另一个组件,以便它可以做出反应.但是,因为我的ngForm是@ViewChild而不是@Input或@Output ngOnChanges没有检测到更改.
相当于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,但我不知道是否还有.