Angular 2.删除@Hostlistener()

时间:2017-04-26 19:26:00

标签: javascript angular typescript

如何在Angular 2中删除 @Hostlistener(),就像在Native JS中使用 removeEventListener 一样?

示例: 我的页面中有很多dropDown组件。当dropDown打开时,我想在文档点击事件上添加处理程序,并在dropDown关闭时删除处理程序。

原生JS:

function handler(){
  //do something
}
document.addEventListener('click', handler); // add handler
document.removeEventListener('click', handler); // remove handler

Angular 2:

  @HostListener('document: click') onDocumentClick () {
    // do something
  }

  // How can I remove handler?

4 个答案:

答案 0 :(得分:4)

Julia Passynkova答案几乎是正确的。

只需删除"文档"周围的引号,如下所示:

// subscribe
this.handler = this.renderer.listen(document, "click", event =>{...});

// unsubscribe
this.handler();

答案 1 :(得分:3)

您可能需要手动添加/删除侦听器

// subscribe
this.handler = this.renderer.listen('document', "click", event =>{...});

// unsubscribe
this.handler();

答案 2 :(得分:0)

在这里查看我的答案以获取另一条提高性能的途径,而不必处理删除@Hostlistener的问题 Detect click outside Angular component

答案 3 :(得分:0)

我管理的最好的方法是实质上添加/删除附加到侦听器的方法。

首先设置侦听器:

@HostListener('document:click', ['$event'])
handler(event: any) : void {};

然后插入适合您解决方案的代码:

//add handler
this.handler = function(event: any) : void {
    // do something
}

//remove handler
this.handler = function() : void {};