20

コンポーネントを作成しています。私は 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 リフレクションについてよく知らないので、これがどこでも機能するかどうかはわかりません。

4

1 に答える 1