Angular AddEventListener-使用外部函数时未定义的方法

Angular AddEventListener-使用外部函数时未定义的方法,angular,ionic2,Angular,Ionic2,我有一些这样的代码: addMarkerListener(){ document.querySelector('body').addEventListener('click', (event) => (this.handleMarkerListenerClick(event))); } handleMarkerListenerClick(event){ let target = event.target as HTMLElement; if (targ

我有一些这样的代码:

  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();
    }
  }
它工作得很好,但我需要稍后删除该侦听器,因此我必须像这样调用我的处理程序:

  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
是我的组件中的一个函数,在第一种情况下运行良好。有人知道我做错了什么吗?谢谢

尝试使用

或在构造函数中:

this.handleMarkerListenerClick = this.handleMarkerListenerClick.bind(this);
但最好用像这样有角度的方式

@HostListener('document:click', ['$event'])
handleMarkerListenerClick(e) { ... }

试用

或在构造函数中:

this.handleMarkerListenerClick = this.handleMarkerListenerClick.bind(this);
但最好用像这样有角度的方式

@HostListener('document:click', ['$event'])
handleMarkerListenerClick(e) { ... }


在构造函数中,说
this.handleMarkerListenerClick=this.handleMarkerListenerClick.bind(this)
。在构造函数中,说
this.handleMarkerListenerClick=this.handleMarkerListenerClick.bind(this)。首先尝试了构造函数解决方案,效果非常好。非常感谢!第一次尝试构造函数解决方案,效果很好。非常感谢!