2016-07-25 7 views
1

Component parent (Vorlage) übergeben wird:Wie kann ich emittieren ein Ereignis den Emitter in einer Funktion in Angular 2

<CHILD></CHILD> 
<overlayer *ngIf="showPopup" (evTogglePopup)="onShowPopup($event)"></overlayer> 

Component CHILD (@Component):

@Output() evTogglePopup = new EventEmitter(); 
... 
this.inputUt.ajaxCheckExistingEmail(email, this.evTogglePopup); 

abhängig von der Unter MyInputUtility (ein Anbieter @Injectable in CHILD importiert und verwendet):

ajaxCheckExistingEmail(email, evEmitter:EventEmitter<any>){ 
     if (email.valid){ 
      return this.http.post(
       GLOBAL_CONST.apiPath + "/user/user/api-check-user-email", 
       'email=' + email.value, 
       {headers: this.headers} 
      ).map(response => response.json()) 
      .subscribe(val => { 
       console.log(val); 
       if(val.emailExists){ 
        evEmitter.emit(true); 
       } 
      }); 
     } 
} 

Diese „Lösung“ nicht funktioniert, und ich habe mich gefragt, i Das liegt daran, dass evEmitter an die Funktion ajaxCheckExistingEmail übergeben wird.

Sosterd von mir
Das Problem war, dass „Überlagerungsschicht“ ist eine andere Wähler Form, dass man durch CHILD (Selektor) zeigte, und ich dachte, es wäre so gut gearbeitet haben.

ich so unten geändert und jetzt funktioniert es:

<CHILD (evTogglePopup)="onShowPopup($event)"></CHILD> 
    <overlayer *ngIf="showPopup"></overlayer> 
+0

'evTogglePopup' ist ein Objekt und ein Objekt wird nicht durch Kopieren sondern durch Referenz übergeben. Was funktioniert nicht? Wie funktioniert es nicht? –

+0

Einfach das Ereignis wurde nicht emittiert nach/mit "evEmitter.emit (true)" in der Komponente, die den Event-Listener enthalten – Donovant

+0

Ich aktualisierte die Frage – Donovant

Antwort

2

Events von @Output() nicht Blase. Entweder Sie übergeben es von einem Elternteil an den nächsten oder Sie können einen gemeinsam genutzten Dienst verwenden, um Daten zwischen Elementen zu teilen, die nicht in einer direkten Eltern-Kind-Beziehung sind.

Weitere Informationen finden Sie unter https://angular.io/docs/ts/latest/cookbook/component-communication.html.

Verwandte Themen