簡體   English   中英

Angular2:如何以特定順序調用@Input setters?

[英]Angular2: How to have @Input setters called in certain order?

我正在創建一個組件。 由於我喜歡Apache Wicket的處理方式,因此我試圖模仿IModel的數據傳遞方式。 為此,我向子組件傳遞了一個模型和回調,它們可以提取相關的值,而不是調用函數來預先獲取數據。

問題在於,對新設置的模型的處理使用了回調。 因此,如果在設置回調之前調用了模型設置器,則Angular會崩潰。
解決方法:將需要回調的操作推遲到ngAfterViewInit()等。

簡而言之:

  • 如何控制@Inputs的設置順序?
  • 我可以依賴源代碼中的順序嗎?

示例:(在這里更改訂單似乎可以完成工作)

@Input()
valueCallback: (item: any) => string
    = app => { throw new Error("valueCallback not yet defined."); };

@Input()
labelCallback: (item: ItemType) => string;

使用該子組件的模板:(在此更改順序不會更改順序)

            <wu-checkboxes [groupName]="'includedApps'"
                           [options]="availableApps"
                           [valueCallback]="appsValueCallback"
                           [labelCallback]="appsLabelCallback"
            >

正如我上面提到的,Angular2似乎遵循@Input類成員的順序,並以該順序設置/調用它們。 問題是,事實是事實還是法律上的歧視? 我不想僅僅因為當前以這種方式編碼而依賴於有效的功能。 我對JavaScript反射知之甚少,所以我無法確定這是否在所有地方都能奏效。

您可以使用ngOnChanges()被稱為每次@Input()是由變化檢測更新。 您可以在ngOnChanges中檢查所有輸入值是否已經可用,然后執行代碼。 不過,您需要注意自己,以后的更新不會再次觸發函數調用(以防萬一)。

更新

綁定的順序(值綁定和事件綁定)在Angular2中未定義,因此您不能依賴特定的順序。

暫無
暫無

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

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