我有一些这样的代码:
addMarkerListener(){
document.querySelector('body').addEventListener('click', (event) => (this.handleMarkerListenerClick(event)));
}
handleMarkerListenerClick(event){
let target = event.target as HTMLElement;
if (target.tagName.toLowerCase() == "a" && target.className.startsWith("ver-mais-unidade")){
this.onViewUnidade();
}
}
它工作得很好,但我稍后需要删除该侦听器,所以我必须像这样调用我的处理程序:
addMarkerListener(){
document.querySelector('body').addEventListener('click', this.handleMarkerListenerClick);
}
handleMarkerListenerClick(event){
let target = event.target as HTMLElement;
if (target.tagName.toLowerCase() == "a" && target.className.startsWith("ver-mais-unidade")){
this.onViewUnidade();
}
}
问题是,使用第二个代码,我得到"this.onViewUnidade"是未定义的。 onViewUnidade
是我的组件中的一个函数,在第一种情况下效果很好。有人知道我做错了什么吗?谢谢!
尝试使用实例函数
handleMarkerListenerClick = (event) => {
或在构造函数中:
this.handleMarkerListenerClick = this.handleMarkerListenerClick.bind(this);
但最好使用像
@HostListener('document:click', ['$event'])
handleMarkerListenerClick(e) { ... }
或
constructor(private renderer: Renderer2) {}
...
this.listenFunc = renderer.listen(document.body, 'click', (e) => {
...
});
...
ngOnDestroy() {
this.listenFunc();
}