Aktualnie ładuję komponenty kątowe dynamicznie w mojej aplikacji przy użyciu następującego kodu.Jak ładować komponent dynamicznie za pomocą nazwy komponentu w angular2?
export class WizardTabContentContainer {
@ViewChild('target', { read: ViewContainerRef }) target: any;
@Input() TabContent: any | string;
cmpRef: ComponentRef<any>;
private isViewInitialized: boolean = false;
constructor(private componentFactoryResolver: ComponentFactoryResolver, private compiler: Compiler) {
}
updateComponent() {
if (!this.isViewInitialized) {
return;
}
if (this.cmpRef) {
this.cmpRef.destroy();
}
let factory = this.componentFactoryResolver.resolveComponentFactory(this.TabContent);
this.cmpRef = this.target.createComponent(factory);
}
}
Tutaj funkcja resolveComponentFactory akceptuje typ komponentu. Moje pytanie brzmi: Czy jest jakiś sposób mogę załadować komponent używając nazwa składnika ciąg np mam komponent zdefiniowany jako
export class MyComponent{
}
Jak mogę dodać powyżej komponentu przy użyciu nazwy komponentu ciąg „MyComponent” zamiast typu?
Jego błąd rzucania na x.name. Nazwa właściwości "nie istnieje" w typie "{}". –
Zaktualizowałem odpowiedź – yurzui
Dzięki. Rozwiązałem błąd w powyższym komentarzu przy użyciu fabryki.find (x => x ['name'] === this.comp); jednak teraz pojawia się błąd Argumentu typu "{}" nie można przypisać parametrowi typu "Typ <{}>". Brak właściwości "apply" w typie "{}". on line const factory = this.resolver.resolveComponentFactory (factoryClass); –