我有一个Angular 2网站,但在Firefox中并不完全正常。问题是它无法识别我传递给我的打字稿函数的事件。该事件是鼠标单击,该功能是鼠标单击事件处理程序。
html / angular代码如下所示:
<div class="click-to-filter-outer" (click)="clickToFilter_Clicked(e)">
打字稿看起来像这样:
clickToFilter_Clicked(e) {
$('.filter-panel').css('max-height', '500px');
this.filterPanelState = this.filterPanelStates.EXPANDED;
e.stopPropagation();
}
我在Firefox控制台中遇到的错误是:
TypeError: e is undefined
在所有其他浏览器中,我不必将click事件传递给该函数。我可以通过调用window.event来实现它:
clickToFilter_Clicked() {
$('.filter-panel').css('max-height', '500px');
this.filterPanelState = this.filterPanelStates.EXPANDED;
window.event.stopPropagation();
}
在Firefox中运行带有打字稿的角度网站的点击事件处理程序中获取点击事件的正确方法是什么?如果我在上面的代码中正确地做了什么,可能会导致它说它无法识别事件变量?
感谢。
答案 0 :(得分:1)
为了在声明事件时捕获事件对象,您必须使用$event
而不是e
,如下所示:
<div class="click-to-filter-outer" (click)="clickToFilter_Clicked($event)"></div>
此外,从组件方面来说,您可以使用e
,这不会导致任何问题。
答案 1 :(得分:1)
如果你的html模板是相同的component.ts,那么,
<div class="click-to-filter-outer" (click)="clickToFilter_Clicked($event)">
clickToFilter_Clicked(param1) {
/*---------------------*/
}
或者,
<div class="click-to-filter-outer" (click)="clickToFilter_Clicked($event)">
@Output() loadEvent = new EventEmitter<any>();
clickToFilter_Clicked(param1): any {
this.loadEvent.emit({ param1 });
}
<child-cmp (loadEvent)=loadEvt($event)></child-cmp>
loadEvt = ($event) => {
this.clickToFilter_Clicked($event.param1);
}
clickToFilter_Clicked(param1): any {
/* --------logic implementation----------*/
}
或者,
<div class="click-to-filter-outer" (click)="clickToFilter_Clicked($event)">
@ViewChild(childComponent)
public child: childComponent;
getChildMethod(param1): any {
this.child.clickToFilter_Clicked(param1);
}
clickToFilter_Clicked(param1): any {
/* --------logic implementation----------*/
}