2016-05-06 19 views
6

Nell'angolo 2, è possibile creare manualmente un'istanza di un componente A, quindi passarlo e renderlo nel modello del componente B?È possibile istanziare manualmente il componente in angolare 2

+0

Benvenuti quindi per favore controllare questo [URL] (http://stackoverflow.com/help) sarà aiutandovi a sollevare la tua domanda qualità dei contenuti –

risposta

0

Sì, è supportato. È necessario un ViewComponentRef che può essere acquisito ad esempio immettendolo nel costruttore o utilizzando una query @ViewChild('targetname') e un ComponentResolver che può anche essere iniettato.

Questo esempio di codice da https://stackoverflow.com/a/36325468/217408 permette ad esempio di aggiungere componenti in modo dinamico con *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

questo esempio non consente di creare un'istanza di un componente con i dati. – dopatraman

+0

Non sai cosa intendi. L'esempio più completo nella risposta collegata mostra come passare i dati in entrata e in uscita. –

Problemi correlati