據我所知,如果輸入屬性更改(也有其他方式),則更改檢測將觸發OnPush標記的組件。角2更改檢測:OnPush
但我沒有在我的子組件輸入屬性,我有一個服務注入到我的組件。我訂閱了這個子組件中服務所暴露的observable。現在在訂閱回調方法中,我更改了我的子組件的私有屬性值中的一個。該組件的模板與此屬性綁定。
所以問題是當觀察者發佈一個事件時,我的訂閱者回調被調用,並且它改變了屬性值,但是這個視圖並不反映這些改變。用戶界面只在我點擊頁面某處時更新。
changeDetection: ChangeDetectionStrategy.OnPush
更新1:Plunker添加
你試過使用異步管道或'cdRef.markForCheck()'?你的代碼在哪裏? – yurzui
我無法使用異步管道,因爲我的模板綁定到組件示例字符串的私有屬性。和CDR.markForCheck()我讀過,但不是一個矯枉過正,因爲它會通過發射CD回到anscetor根組件?我不知道如何發佈一個重要的,將谷歌和不久之後添加。謝謝。 – thinkmmk
不,'markForCheck'不會回到祖先的根。這是'ApplicationRef.tick()'。 'markForCheck'使得組件在下一次變化檢測輪迴時不被跳過。 –