[英]Angular2: How to have @Input setters called in certain order?
我正在創建一個組件。 由於我喜歡Apache Wicket的處理方式,因此我試圖模仿IModel
的數據傳遞方式。 為此,我向子組件傳遞了一個模型和回調,它們可以提取相關的值,而不是調用函數來預先獲取數據。
問題在於,對新設置的模型的處理使用了回調。 因此,如果在設置回調之前調用了模型設置器,則Angular會崩潰。
解決方法:將需要回調的操作推遲到ngAfterViewInit()
等。
簡而言之:
示例:(在這里更改訂單似乎可以完成工作)
@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.