Я получаю ошибку circular dependency
в моей службе @ComponentBuilderService
, потому что некоторые компоненты, в которые я импортирую, т.е. BreakComponent
, LocationComponent
, используют эту службу, а также импортируют эту @ComponentBuilderService
.
Я пытаюсь использовать метод buildComponents()
внутри этого @ComponentBuilderService
, чтобы иметь возможность динамически создавать компоненты, проблема в том, что некоторые компоненты должны использовать этот метод buildComponents()
на этомтот же сервис для построения своих подкомпонентов.
@ ComponentBuilderService:
@Injectable()
export class ComponentBuilderService {
private renderer: Renderer2;
constructor(private resolver: ComponentFactoryResolver, renderFactory: RendererFactory2) {
this.renderer = renderFactory.createRenderer(null, null);
}
buildComponents(nContainer: ViewContainerRef , elements) {
// loop through elements creating different components based on element.Type
elements.forEach((element, idx) => {
switch (element.Type) {
case 'break':
const breakComponent = nContainer.createComponent(this.resolver.resolveComponentFactory(BreakComponent));
console.log(breakComponent.location.nativeElement);
break;
case 'location':
const locationComponent = nContainer.createComponent(this.resolver.resolveComponentFactory(LocationComponent));
locationComponent.instance.Elements = element.Elements;
break;
}
});
}
}
@ LocationComponent:
import { Component, AfterContentInit } from '@angular/core';
import { ComponentBuilder } from '../../../shared/services/component-build.service';
@Component({
selector: 'location',
template: `<div> some location building </div>`,
styleUrls: ['./location.component.scss'],
})
export class LocationComponent implements AfterContentInit {
Elements;
constructor(private componentBuilder: ComponentBuilder) { }
ngAfterContentInit() {
console.log(this.Elements);
this.componentBuilder.buildComponents(this.Elements);
}
}
Вопрос: Есть ли способ создать ComponentBuilderService
?