Я пытаюсь использовать сервис для создания динамических компонентов.У меня не было проблем с созданием динамического компонента, когда код был в компоненте.Когда я перемещаю свой код в службу, я получаю ошибку о том, что createComponent не найден.
У меня есть вызов функции в 'ngAfterViewInit', большинство проблем возникало у людей, когда я искал решения.Я пытался выяснить, почему мой код не работает, когда я помещаю его в службу.Я также пытался сделать режиссера, но это не сработало.
Вот код в стеке блиц https://stackblitz.com/edit/angular-ikshag
Ниже указан код компонента и сервиса.
app.component
import { GenService } from './gen.service';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent implements AfterViewInit {
name = 'Angular';
constructor(private gen: GenService) { }
ngAfterViewInit() {
this.gen.createComp("yo");
}
}
service
import { Injectable, ComponentFactoryResolver, ViewChild,ViewContainerRef } from '@angular/core';
import { ChildComponent } from './child/child.component';
@Injectable({
providedIn: 'root'
})
export class GenService {
@ViewChild('container', { static: true }) newsHost: ViewContainerRef; //this allow the targeting needed to add component
constructor(private componentFactoryResolver: ComponentFactoryResolver) { }
createComp(message) {
let componentFactory = this.componentFactoryResolver.resolveComponentFactory(ChildComponent);
let componentRef = this.newsHost.createComponent(componentFactory);//adds it to the screen
}//end of bot reply
}
дочерний компонент по умолчанию, который говорит, что он работает.