Angular - поставщики контента
Можно ли «передавать поставщиков» от компонентов представления к компонентам содержимого?
Я сталкиваюсь с этой проблемой снова и снова и не могу найти ни решения, ни информации (документов), что невозможно по замыслу.
Если у меня есть компонент в шаблоне, его можно вставить в конструктор дочернего компонента (это, конечно, работает):
@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!
Есть ли способ написать такого поставщика (или viewProvider) в CComponent, который бы предоставлял инъекционные объекты из своего шаблона / представления?