Angular 会自动移除模板事件监听器吗?

Dre*_*nai 1 angular

在我的模板中,我click附加了事件侦听器:

<a class="link-component" href="{{displayURL}}" (click)="handleClick($event)">
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用 HostListener 或 Renderer2,如下所示:

 this.clickListener = this.renderer.listen(this.htmlElement, 'click'........
 this.clickListener();
Run Code Online (Sandbox Code Playgroud)

但是,就template绑定的事件处理程序而言,它们会在组件销毁时自动删除吗?

yur*_*zui 6

当角创建视图节点它侦听元件输出,例如clickfocuschange等等,并增加了一次性回调disposables当前视图的阵列 在此处输入图片说明

现在,当需要销毁 view angular 时,只需运行所有一次性回调

export function destroyView(view: ViewData) {
  if (view.state & ViewState.Destroyed) {
    return;
  }
  execEmbeddedViewsAction(view, ViewAction.Destroy);
  execComponentViewsAction(view, ViewAction.Destroy);
  callLifecycleHooksChildrenFirst(view, NodeFlags.OnDestroy);
  if (view.disposables) {
    for (let i = 0; i < view.disposables.length; i++) {
      view.disposables[i]();  <================================
    }
  }
  ...
Run Code Online (Sandbox Code Playgroud)

因此,这种方式 angular 将删除当前视图的所有侦听器。

在此处输入图片说明

也可以看看: