Wie load-Komponente, die dynamisch mit component-name in angular2?
Ich bin derzeit auf der be-Winkel-Komponenten dynamisch in meine Anwendung mit dem folgenden code.
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);
}
}
Hier resolveComponentFactory Funktion akzeptiert Komponente geben. Meine Frage ist, gibt es eine Möglichkeit, ich kann load-Komponente mit component-name-string e.g ich habe die Komponente definiert als
export class MyComponent{
}
Wie kann ich über Komponente mit component-name string "MyComponent" statt geben?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vielleicht wird dies funktionieren
wo
this.comp
ist ein string-name der Komponente, wie"MyComponent"
Plunker Beispiel
Zu tun, es funktioniert mit Verkleinerung sehen
Type
this.resolver['_factories']
, die_factories
Daten Mitglied ist private. Bitte korrigieren Sie mich, wenn ich falsch bin.ERROR Error: No provider for name!
Es ist auch möglich, den Zugriff durch import:
someComponentLocation.ts - enthält enum der möglichen Komponenten:
Importeur Komponente:
dann kann man erstellen Sie eine Instanz der Komponente, zum Beispiel:
beachten Sie, dass die Komponente in @NgModule entryComponents
this.dynamicInsert
variable? Können Sie ein minimum funktionierende Beispiel-code?https://stackblitz.com/edit/angular-hzx94e
Hier ist, wie können Sie die Last eckige Komponenten von string. Es funktioniert auch für prod baut.
Zusätzlich können Sie injizieren von Daten in jede der dynamisch belasteten Komponenten.