簡體   English   中英

Angular ngOnChanges 和變更檢測策略似乎是矛盾的?

[英]Angular ngOnChanges and the change detection strategies appear to be contradictory?

NgChanges on 在輸入綁定上運行 - 如果輸入是引用類型 - 當引用更改時。 即這樣的對象:

{ 值:2 }

如果更改其 value 屬性,則不會導致 ngchanges 運行。 這是因為 Angular 默認更改檢測策略會比較引用。

Angular2 更改檢測:ngOnChanges 不會為嵌套對象觸發

然而,當我們考慮兩種變化檢測策略時,這對我來說似乎是矛盾的:

默認 - 組件的更改檢測在綁定更改時發生 - 但根據上述內容,這不會識別引用類型的引用未更改的輸入的更改。 或者換句話說,更改檢測僅在值類型值更改或引用類型引用更改時運行。

OnPush - 更改檢測僅在值類型值更改或引用更改時運行。

顯然,默認更改檢測不像我理解的那樣工作,或者它與 OnPush 相同,但 onChanges 生命周期鈎子似乎只在與 OnPush 相同的規則下觸發。

Angular 將始終比較先前和新輸入值的引用。 Default 和 OnPush 策略之間的區別在於 Angular何時觸發更改檢測。

使用Default策略 Angular 會進行臟檢查,這意味着它每次都會檢查您的應用程序中是否發生了某些變化:它將檢查每個瀏覽器事件、任何 HTTP 調用、計時器......在大型應用程序中,這種方法有一個對性能影響很大。

通過OnPush更改檢測,Angular 只會在其輸入之一發生更改時檢查組件(它依賴於不變性的概念來了解組件何時更改)。

如果您想更深入地了解 Angular Change Detection,我建議您閱讀 Max Koretskyi 撰寫的這篇文章,他詳細解釋了 Change Detection 的工作原理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM