2016-08-19 2 views
2

Ich versuche, die Komponente dynamisch zu erstellen, die in Golden Layout registriert werden soll. ZBGoldenes Layout + Angular2 RC5 - ViewContainerRef kann nicht verwendet werden, um Komponente dynamisch zu erstellen

@ViewChild('placeholder', { read: ViewContainerRef }) viewContainerRef; 

ngAfterViewInit(){ 
    this.myLayout.registerComponent('testComponent', (container, componentState) => { 
     //Create an empty div on the container 

     container.getElement().html("<div #placeholder></div>"); 
     this.componentFactory = this.componentFactoryResolver.resolveComponentFactory(TestComponent); 
     this.cmpRef = this.viewContainerRef.createComponent(this.componentFactory); 
     this.cmpRef.changeDetectorRef.detectChanges(); 
     GlDirective.componentCount++; 
    }); 
    } 

Da jedoch viewContainerRef zu ViewChild bezieht, die erst jetzt erstellt wird, ist es immer nicht definiert. Wie können wir eine Komponente in RC5 erstellen, die dynamisch hinzugefügtes div wie das obige verwendet? Ich habe die Antwort von @ Günter Zöchbauer auf Angular 2 dynamic tabs with user-click chosen components hergeleitet. Allerdings unsicher, wie dies mit Golden Layout erreicht werden kann, das das DOM benötigt, das im laufenden Betrieb erzeugt wird. Bitte helfen Sie.

Antwort

0

Dies wird nicht unterstützt.

So etwas wie #placeholder in

container.getElement().html("<div #placeholder></div>"); 

wird nur an den Browser hinzugefügt werden und nicht durch Angular2 in irgendeiner Weise erkannt oder verarbeitet werden (ausgenommen Hygienisierung für Sicherheitszwecke).

Eine Vorlagenvariable kann nur erstellt werden, indem Sie sie statisch zu einer Komponentenvorlage hinzufügen.

+0

Laut http://plinkr.co/edit/tUQOev?p=preview könnten wir ein zusätzliches div mit DCL laden, das jetzt veraltet ist. Irgendeine Idee, wie das erreicht werden kann? – Rajee

+0

Ich weiß, dass DCL CSS-Selektoren unterstützt und nein, ich weiß nicht, ob es eine Möglichkeit gibt, dies mit den derzeit verfügbaren APIs zu tun: -/ –

+0

Die einzige Möglichkeit, dies zu erledigen, ist die Verwendung von DynamicComponentLoader, aber nicht sicher, ob das ist der richtige Weg – Rajee

Verwandte Themen