7

Angular 2.0.1 を使用しています。

他のコンポーネントを介して取り込むことができるコンポーネントがあります<ng-content>-これはうまく機能します。

私が遭遇する問題は、注入されたコンポーネントを参照したいときです。

<ng-content>それが 1 つのコンポーネントに過ぎないこと を知っていれば、次のように言うことができます。@ContentChild(MyComponent) dynamicTarget: IMyComponent;しかし、それは任意のコンポーネントである可能性があるため (注入されたコンポーネントが特定のインターフェイスを実装しているという唯一の仮定はあります)、より複雑になります。

私も試してみましたが<ng-content #dynamicTarget'>、それを言って参照しました @ContentChild('dynamicTarget') dynamicTarget: IMyComponent;が、これは未定義を返します。

これがコンポーネントのインスタンスであることをAngular 2に伝えて、関数を呼び出せるようにする方法を知っている人はいますか?

ユース ケースをさらに明確にするために、任意のコンポーネントをコンテンツとして取り込むことができるマルチステップ ウィザードがあり、validateコンテンツに対して関数を呼び出したいと考えています (これも、前述のインスタンスに存在すると仮定します)。

4

3 に答える 3

1
@NgModule({
  imports: [ BrowserModule ],
  declarations: [ App, Parent, Transcluded1, Transcluded2 ],
  providers: [
    {provide: TranscludedBase, useExisting: Transcluded1, multi:true}
    {provide: TranscludedBase, useExisting: Transcluded2, multi:true}
  ],
  bootstrap: [ App ]
})

プランカーの例

  • 動的コンポーネント作成 Angular 2動的タブを、タブの代わりにウィザードステップでユーザーがクリックして選択したコンポーネントで使用できます。

  • もう 1 つの方法は、要素を射影するだけでなく、明示的に入力に渡すことです。

プランカーの例

于 2016-11-07T06:43:40.780 に答える
-1

すべてのコンポーネントがvalidate同じインターフェイスを持ち、実装することがわかっている場合は、次のIValidateように言うことができます。

@ContentChild('IValidate') dynamicTarget: IValidate;
// ...
this.dynamicTarget.validate();

Angular は、要求されたインターフェイスに適合する限り、正確なクラスを気にしません。

于 2016-11-07T13:24:29.147 に答える