Как я могу испустить событие, передавая излучатель внутри функции в Angular 2
Компонент РОДИТЕЛЬ (шаблон):
<CHILD></CHILD>
<overlayer *ngIf="showPopup" (evTogglePopup)="onShowPopup($event)"></overlayer>
Компонент РЕБЕНОК (@Component):
@Output() evTogglePopup = new EventEmitter();
...
this.inputUt.ajaxCheckExistingEmail(email, this.evTogglePopup);
функция MyInputUtility (поставщик @Injectable импортируется и используется в CHILD):
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);
}
});
}
}
Это "решение" не работает, и мне было интересно, если это потому, что evEmitter передается путем копирования в функцию ajaxCheckExistingEmail.
Sosterd сам
Проблема заключалась в том, что "оверлей" - это другая форма селектора, которую указал CHILD (селектор), и я подумал, что это сработало бы также.
Я изменился следующим образом, и теперь это работает:
<CHILD (evTogglePopup)="onShowPopup($event)"></CHILD>
<overlayer *ngIf="showPopup"></overlayer>
1 ответ
События из @Output()
не пузырь Либо вы передаете его от одного родителя другому, либо вы можете использовать общую службу для обмена данными между элементами, которые не находятся в прямых отношениях родитель-потомок.
См. https://angular.io/docs/ts/latest/cookbook/component-communication.html для получения подробной информации.