Typescript 如何在Angular 2中通过函数内的发射器发射事件
组件父级(模板): MyInputUtility的功能(导入并用于子级的提供程序@Injectable):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
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>