2016-08-23 74 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

相關問題