2016-07-25 2 views
1

родительском компоненте (шаблон):Как испускают событие, проходящий излучатель внутри функции в угловых 2

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

нижестоящего компонента (@Component):

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

Funtion из MyInputUtility (@Injectable поставщик импортного и используется в РЕБЕНКА):

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); 
       } 
      }); 
     } 
} 

Это «решение» не работает, и мне было интересно, я f это потому, что evEmitter передается копией функции ajaxCheckExistingEmail.

Sosterd сам
Проблема в том, что «верхний слой» является другой формой селектор, который один указываемого РЕБЕНКА (селектор), и я думал, что это сработало бы, как хорошо.

я изменил, как это ниже, и теперь он работает:

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

'evTogglePopup' - это объект, и объект не передается копией, а ссылкой. Что не работает? Как это не работает? –

+0

Просто событие не выдавало после/с "evEmitter.emit (true)" в компоненте, который содержит прослушиватель событий – Donovant

+0

Я обновил вопрос – Donovant

ответ

2

События от @Output() не пузырь. Либо вы передаете его от одного родителя к другому, либо вы можете использовать общий сервис для обмена данными между элементами, которые не находятся в прямом отношении родитель-ребенок.

Для получения более подробной информации см. https://angular.io/docs/ts/latest/cookbook/component-communication.html.

 Смежные вопросы

  • Нет связанных вопросов^_^