簡體   English   中英

@Input對象上的角度變化檢測

[英]Angular change detection on @Input object

我有點理解變量檢測在Angular 2中是如何工作的,但我真的很難將我的AngularJS方法轉移/更改為關於變化檢測的NG2。

想象一下,我有一個組件,它接受一個@Input()anObject並且只有一個函數logAllProperties() ,為了論證, 它將所有屬性記錄到控制台。 我想做的就是每當 anObject以任何方式改變調用logAllProperties()

我理解將對象視為不可變(使用像Immutable.js這樣的外部庫或者通過強制整個對象即使對於較小的屬性更改也會更改)將觸發ngOnChange,但無論如何只要在一旁發生更改就調用一個函數從這些或使用DoCheck我理解可能是非常低效。

除了“有辦法”之外,做這樣的事情的正確方法是什么? 我是Angular2的新手,所以我非常樂意學習正確的方法,如果不可變和可觀察的方式。

提前致謝

我在我們的項目中發現使用set在某些情況下運行良好,但是其他需要在組件之間同步的情況可能會令人不安,那么我們在這些情況下使用ngOnChange 這是一個例子。

@Input() set myProperty(myProperty: MyPropertyType) {
        if (myProperty) {
            this.logService.log(myProperty);
        }

        this._myProperty = myProperty;
}
private _myProperty: MyPropertyType= new MyPropertyType();

關於Angular2新生命周期的事情仍然令人困惑,文檔樣本不適合大多數現實世界的案例。

@input decorator表示您的組件期望從其父級獲取一些數據,這些數據將在該屬性中捕獲

同樣的方式@output@output中的裝飾器,其中父組件可以從child中捕獲一些東西。

在內部,它使用了可觀察的,我不認為它是不可變的。

ngrx提供了一個redux類型的不可變機制,每個狀態都被記住,你也可以回到它們。

Observable和ngrx現在並行運行。

每次anObject更改時執行操作的直接方法是使用setter或ngOnChange(請參閱Fals的答案)。

使用不可變對象, OnPush的變化檢測策略是一種提高變化檢測性能的方法。 這不是Angular中變化檢測最明顯的用法。

對於一個完整的解釋,我建議你閱讀這真是一篇好文章 ,如果你有一段時間(45分鍾),您可以通過文章的作者檢查這個視頻在這里

從那里,你應該很好地了解正在發生的事情。

暫無
暫無

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

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