2016-05-06 6 views
6

In Winkel 2, ist es möglich, eine Komponente A manuell instanziieren, dann herumreichen und in der Vorlage der Komponente B rendern?Ist es möglich, Komponente in Winkel 2 manuell zu instantiieren 2

+0

Willkommen hinzuzufügen bitte diese [URL] überprüfen (http://stackoverflow.com/help) so wird euch helfen zu Erhöhen Sie die Qualität Ihres Frageninhalts –

Antwort

0

Ja, das wird unterstützt. Sie benötigen eine ViewComponentRef, die zum Beispiel durch Injizieren in den Konstruktor oder unter Verwendung einer @ViewChild('targetname') Abfrage und einer ComponentResolver, die auch injiziert werden kann, erworben werden kann.

Dieses Codebeispiel aus https://stackoverflow.com/a/36325468/217408 ermöglicht beispielsweise Komponenten dynamisch SO mit *ngFor

@Component({ 
    selector: 'dcl-wrapper', 
    template: `<div #target></div>` 
}) 
export class DclWrapper { 
    @ViewChild('target', {read: ViewContainerRef}) target; 
    @Input() type; 
    cmpRef:ComponentRef; 
    private isViewInitialized:boolean = false; 

    constructor(private resolver: ComponentResolver) {} 

    updateComponent() { 
    if(!this.isViewInitialized) { 
     return; 
    } 
    if(this.cmpRef) { 
     this.cmpRef.destroy(); 
    } 
    this.resolver.resolveComponent(this.type).then((factory:ComponentFactory<any>) => { 
     this.cmpRef = this.target.createComponent(factory) 
    }); 
    } 

    ngOnChanges() { 
    this.updateComponent(); 
    } 

    ngAfterViewInit() { 
    this.isViewInitialized = true; 
    this.updateComponent(); 
    } 

    ngOnDestroy() { 
    if(this.cmpRef) { 
     this.cmpRef.destroy(); 
    }  
    } 
} 
+1

Dieses Beispiel ermöglicht nicht das Instanziieren einer Komponente mit Daten. – dopatraman

+0

Nicht sicher, was du meinst. Das ausführlichere Beispiel in der verknüpften Antwort zeigt, wie Daten ein- und ausgegeben werden. –