2016-04-05 27 views
5

Ho usato il caricatore di componenti dinamici Angular2. Tutto funziona bene.Componente carico dinamico angolare 2, gli eventi non si attivano?

Il componente caricato dinamicamente emette eventi, ma non riesco a raggiungerlo da nessuna parte.

codice principale:

this.dcl.loadAsRoot(SomeComponent, "#dynamiccomponenthere", this.injector) 

modello principale:

<div id="dynamiccomponenthere" (somecustomevent)="someFunc()"></div> 

bambini:

... 
this.somecustomevent.emit(data) 
... 

* SOLUZIONE: (thx Gunther) *

cmp.instance['somecustomevent'].subscribe(ev => { 
    this.consoleLog(ev) // run function in parent! 
}) 

risposta

6
  • LoadAsRoot non richiama modifica di rilevamento

Attualmente loadAsRoot() viene utilizzato solo il bootstrap del componente principale (AppComponent) e gli ingressi non sono supportati sul componente principale.

Una soluzione è spiegato in questo commento https://github.com/angular/angular/issues/6370#issuecomment-193896657

quando si utilizza loadAsRoot è necessario per attivare il rilevamento delle modifiche e manualmente cablare ingressi, uscite, iniettori, e la funzione di componente di smaltire

function onYourComponentDispose() { 
} 
let el = this.elementRef 
let reuseInjectorOrCreateNewOne = this.injector; 
this.componentLoader.loadAsRoot(YourComponent, this.elementRef, reuseInjectorOrCreateNewOne, onYourComponentDispose) 
.then((compRef: ComponentRef) => { 
    // manually include Inputs 
    compRef.instance['myInputValue'] = {res: 'randomDataFromParent'}; 
    // manually include Outputs 
    compRef.instance['myOutputValue'].subscribe(this.parentObserver) 
    // trigger change detection 
    cmpRef.location.internalElement.parentView.changeDetector.ref.detectChanges() 
    // always return in a promise 
    return compRef 
}); 

Vedere anche @ContentChild is null for DynamicComponentLoader

+1

Vedere la riga con 'myOutputValue'. Questo è un esempio di come l'ascolto degli eventi è impostato per i componenti aggiunti con 'loadAsRoot()'. –

+0

In questo esempio. Cosa si suppone essere 'this.parentObserver'? Da dove proviene padreObserver? –

+1

Non importa .. Ho capito. 'parentObserver' nel mio caso era una funzione interna .. IE' private someFunction() {} ' –

Problemi correlati