Typescript 如何在Angular 2中通过函数内的发射器发射事件

Typescript 如何在Angular 2中通过函数内的发射器发射事件,typescript,angular,eventemitter,emit,Typescript,Angular,Eventemitter,Emit,组件父级(模板): MyInputUtility的功能(导入并用于子级的提供程序@Injectable): ajaxCheckExistingEmail(email,evEmitter:EventEmitter){ 如果(email.valid){ 返回this.http.post( 全局_CONST.apiPath+“/user/user/api检查用户电子邮件”, 'email='+email.value, {headers:this.headers} ).map(response=>res

组件父级(模板):

MyInputUtility的功能(导入并用于子级的提供程序@Injectable):

ajaxCheckExistingEmail(email,evEmitter:EventEmitter){
如果(email.valid){
返回this.http.post(
全局_CONST.apiPath+“/user/user/api检查用户电子邮件”,
'email='+email.value,
{headers:this.headers}
).map(response=>response.json())
.订阅(val=>{
控制台日志(val);
如果(val.emailExists){
evEmitter.emit(true);
}
});
}
}
这个“解决方案”不起作用,我想知道是不是因为evEmitter是通过副本传递给ajaxCheckExistingEmail函数的

自己泡的
问题是“overlayer”是一种不同于CHILD(selector)所指的选择器形式,我认为它也可以工作

我做了如下更改,现在可以正常工作了:

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

来自
@Output()
的事件不会冒泡。您可以将数据从一个父级传递到下一个父级,也可以使用共享服务在不存在直接父子关系的元素之间共享数据


有关详细信息,请参阅。

evTogglePopup
是一个对象,对象不是通过副本传递的,而是通过引用传递的。什么不起作用?它是如何工作的?只是在包含事件监听器的组件中的“evEmitter.emit(true)”之后/之后没有发出事件我更新了问题子项是
?其中是
this.inputUt.ajaxCheckExistingEmail(email,this.evTogglePopup)从调用?再次更新,应该很清楚。。。
@Output() evTogglePopup = new EventEmitter();
...
this.inputUt.ajaxCheckExistingEmail(email, this.evTogglePopup);
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);
                }
            });
        }
}
<CHILD (evTogglePopup)="onShowPopup($event)"></CHILD>
    <overlayer *ngIf="showPopup"></overlayer>