Как я могу испустить событие, передавая излучатель внутри функции в 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 для получения подробной информации.

Другие вопросы по тегам