1
這裏是我的plunker:https://plnkr.co/edit/QPqciUngXeby2uECbokx?p=preview (您可能需要點擊停止和運行幾次才能正常加載)爲什麼當[值]改變時更改檢測不會在這裏發生?
表沒有改變。
但是當你把
changeDetection: ChangeDetectionStrategy.OnPush
出,該表的變化。
我的理解是,在OnPush中,當@Input發生變化時,變化檢測將觸發。在這種情況下,@Input是[value],鏈接到this.testData。
爲什麼它沒有改變?
標記
App
的檢查,因此它看起來像角停止監聽在子級別@input變化時,根用OnPush,是正確的?當我使用'[value] =「testData $ | async」'時,表更新,異步管道是否自動添加markForCheck? – techguy2000你的解釋有點落後。需要對「App」組件運行更改檢測,然後在識別出更改時更新模板中的綁定。當組件使用'OnPush'時,'setTimeout()'不會導致變更檢測運行。這是''的'@Input()'被更新的時候。如果''使用'OnPush',則會導致爲''運行更改檢測。每次'testData $'發出事件時,'async'都會導致在''中運行變更檢測。希望這可以幫助。 –
我原來的理解是,當你的答案是當App使用OnPush時,App下的任何組件都會繼承OnPush策略。那是對的嗎?而[值]是中的@Input(),對不對?因此,在我原來的帖子中,中的@Input()已更改,但表未刷新。所以看起來像Angular在父級別檢測到沒有變化時忽略子級別的@Input()更改。我在這裏使用一個簡單的組件而不是p-dataTable:https://plnkr.co/edit/xMu3km7XqvdT2pqCjRmi?p=preview –
techguy2000