ビュー コンポーネントからコンテンツ コンポーネントに「プロバイダを渡す」ことは可能ですか?
私はこの問題に何度も直面しており、設計上不可能な解決策も情報 (ドキュメント) も見つけることができません。
テンプレートにコンポーネントがある場合、子コンポーネントのコンストラクターに注入できます (これはもちろん機能します)。
@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 に記述して、そのテンプレート/ビューから注入可能なオブジェクトを提供する方法はありますか?