我在Angular2(最終版)中遇到了有關組件之間更改檢測和數據流的問題。我已經解決了這個問題,但對我來說這似乎有點冒險 所以想知道是否有更好的方法來做到這一點。Angular2更改檢測「檢查後表達式已更改」
基本上我有一個具有一個子組件B和也* ngFor創建C.
子組件的數量對於每一個組分C組分A,存在定義了在父組件中處理的@Output
A.根據該輸出,確定組件A上的另一個屬性(只是一個數字),在組件B上用作@Input
。
在DEV模式下,每次組件C中的@Output
被觸發,我在控制檯中出現錯誤:
Expression has changed after it was checked. Previous value: XX. Current value: XX.
從閱讀中可以看出,它的類型是由於Angular2中的單向數據流引起的。我想知道如何在我的場景中正常工作?
我暫時在A組份注入ChangeDetectorRef
並調用其detectChanges()
方法,從C. 的實例處理@Output
事件的函數我擔心它的效率並不高壽。我可以嘗試改進它,並且只在最後一個項目的事件(所有C組件同時發送該事件)之後調用它,但是然後我會擔心事件的異步性質和一些意外行爲。
有沒有人有一個想法如何克服這個問題?我的設計在組件之間的數據流方面是否存在根本上的缺陷? 我應該去做一些共享服務而不是交換數據嗎?
任何幫助非常感謝。
當更改檢測運行導致模型更改時,會引發錯誤。例如,如果您在更改檢測調用的'ngOnChanges()'中更改模型。我們需要查看更多代碼來追蹤原因。當一個函數被綁定時,通常會導致它每次調用時都會返回一個新的對象實例。 –
@GünterZöchbauer就是這樣發生的事情。組件C的每個實例都有ngOnChanges(),它會發出事件並導致父組件A中的模型更改。那麼應該避免哪些內容? – Zyga