首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angular Renderer2删除监听器

Angular Renderer2删除监听器
EN

Stack Overflow用户
提问于 2017-06-09 17:29:37
回答 3查看 15.2K关注 0票数 19

有没有可能用新的angular 4渲染器删除侦听器?

下面是界面:

代码语言:javascript
复制
abstract listen(target: 'window' | 'document' | 'body' | any, eventName: string, callback: (event: any) => boolean | void): () => void;

在渲染器中,listen和listenGlobal返回一个函数,但这个函数返回v1。

这是一个问题吗?如果没有,如何删除监听器?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-06-09 17:43:33

这与Renderer没有区别

代码语言:javascript
复制
import { Renderer2 } from '@angular/core';

export class MyComponent {
  listenerFn: () => void;

  constructor(private renderer: Renderer2) {}

  ngOnInit() {
    this.listenerFn = this.renderer.listen(document, 'mousemove', () => console.log('move'));
  }

  ngOnDestroy() {
    if (this.listenerFn) {
      this.listenerFn();
    }
  }
}
票数 57
EN

Stack Overflow用户

发布于 2020-02-19 17:27:59

您还可以使用rxjs中的fromEventPattern函数。

代码语言:javascript
复制
  private createOnClickObservable(renderer: Renderer2) {
    let removeClickEventListener: () => void;
    const createClickEventListener = (
      handler: (e: Event) => boolean | void
    ) => {
      removeClickEventListener = renderer.listen("document", "click", handler);
    };

    this.onClick$ = fromEventPattern<Event>(createClickEventListener, () =>
      removeClickEventListener()
    ).pipe(takeUntil(this._destroy$));
  }

只需按预期使用/订阅即可

代码语言:javascript
复制
   myMouseService.onClick$.subscribe((e: Event) => {
      console.log("CLICK", e);
    });

不要担心破坏,它将由rxjs在关闭观察点的过程中处理!

现场演示:https://stackblitz.com/edit/angular-so4?file=src%2Fapp%2Fmy-mouse.service.ts

要了解更多细节,请参阅另一个答案:Is it possible to use HostListener in a Service? Or how to use DOM events in an Angular service?

票数 0
EN

Stack Overflow用户

发布于 2020-05-13 04:35:10

将Renderer.listen处理程序的结果放在一个变量中会更容易:

代码语言:javascript
复制
listener: any;

this.listener = this.renderer.listen('body', 'mousemove', (event) => {
  console.log(event);
});

当cancel事件发生时,调用参数为空的变量

代码语言:javascript
复制
this.renderer.listen('body', 'mouseup', (event) => {
  this.listener();
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44454203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档