2016-08-23 73 views
6

在Angular 1.x中,我可以使用$ watch观看我想要的任何内容,但是在Angular 2中,我们有ngOnChanges,它非常酷且性能卓越,但只能观看输入并输出装饰器。不过,我不时需要观看本地属性,以便在事件发生变化时发出事件。我记得看到一篇文章解释了如何明确告诉Angular 2观看一个属性,但对于我的生活,我无法再找到这篇文章,我做的每一个搜索都只是告诉我在onChanges中使用输入/输出装饰器。我如何为@ViewChild或其他本地属性创建一个观察器?Angular 2监视组件属性中没有@Input或@Output的更改

例如我有一个ngForm,当它的验证状态从有效更改为无效或反之亦然,我想将状态发送到另一个组件,以便它可以作出反应。但是因为我的ngForm是@ViewChild而不是@Input或@Output ngOnChanges没有检测到更改。

回答

11

与Angular 2中的自定义Angular 1 $watch()等效的是实现生命周期钩子ngDoCheck()并执行自己的检查。生命周期钩子开发指南有an example

请注意,您的ngDoCheck()方法将在每次更改检测运行时调用(就像Angular 1手表一样),因此请确保尽可能高效地实现。

如果可能,请尝试使用RxJS(一个Observable,Subject等),因为它更高效。我们used to be able to subscribe to the NgForm's ControlGroup to be notified of changes,但我不知道这是否仍然可用。

+1

ngModelChange怎么样? – Toolkit

相关问题