0

ビュー コンポーネントからコンテンツ コンポーネントに「プロバイダを渡す」ことは可能ですか?

私はこの問題に何度も直面しており、設計上不可能な解決策も情報 (ドキュメント) も見つけることができません。

テンプレートにコンポーネントがある場合、子コンポーネントのコンストラクターに注入できます (これはもちろん機能します)。

@Component({
  selector: 'aaa',
  template: '<div>This is AAA {{prop}}><div><ng-content></ng-content></div>'
})
export class AComponent {
  prop = Math.random();
}

@Component({
  selector: 'bbb',
  template: '<div>This is BBB. Parent is AAA {{a.prop}}</div>'
})
export class BComponent {
  constructor(public a: AComponent) { }
}

<aaa><bbb></bbb></aaa>

結果:

This is AAA 0.4997284193879621>
This is BBB. Parent is AAA 0.4997284193879621

しかし、注入したいコンポーネントが他のコンポーネントのビューの一部である場合、これを達成することは可能ですか?

このシナリオは機能しません:

@Component({
  selector: 'ccc',
  template: '<aaa><ng-content></ng-content></aaa>'
})
export class CComponent {
}

<ccc><bbb></bbb></ccc>

で終わるNullInjectorError: R3InjectorError(AppModule)[AComponent -> AComponent -> AComponent]: NullInjectorError: No provider for AComponent!

そのようなプロバイダー (またはビュープロバイダー) を CComponent に記述して、そのテンプレート/ビューから注入可能なオブジェクトを提供する方法はありますか?

4

0 に答える 0