当前位置:  开发笔记 > 编程语言 > 正文

如何在Angular 2中绑定渲染元素的事件侦听器?

如何解决《如何在Angular2中绑定渲染元素的事件侦听器?》经验,为你挑选了3个好方法。

如何在Angular 2中的渲染元素中绑定事件侦听器?

我正在使用Dragula拖放库.它创建动态HTML但我的事件不绑定到动态HTML元素.



1> Günter Zöchb..:
import { AfterViewInit, Component, ElementRef} from '@angular/core';

constructor(private elementRef:ElementRef) {}

ngAfterViewInit() {
  this.elementRef.nativeElement.querySelector('my-element')
                                .addEventListener('click', this.onClick.bind(this));
}

onClick(event) {
  console.log(event);
}


在销毁组件后需要进行任何手动清理(`.removeEventListener()`)或者Angular会处理这个问题吗?
不,如果你必须注册它,你需要强制删除它.

2> HDJEMAI..:

为了将事件侦听添加到角度2+的元素,我们可以使用该方法听的的Renderer2服务(渲染器已过时,所以使用Renderer2):

listen(target:'window'|'document'|'body'| any,eventName:string,callback:(event:any)=> boolean | void):()=> void

例:

export class ListenDemo implements AfterViewInit { 
   @ViewChild('testElement') 
   private testElement: ElementRef;
   globalInstance: any;       

   constructor(private renderer: Renderer2) {
   }

   ngAfterViewInit() {
       this.globalInstance = this.renderer.listen(this.testElement.nativeElement, 'click', () => {
           this.renderer.setStyle(this.testElement.nativeElement, 'color', 'green');
       });
    }
}

注意:

当您使用此方法将事件侦听器添加到dom中的元素时,应该在组件被销毁时删除此事件侦听器

你可以这样做:

ngOnDestroy() {
  this.globalInstance();
}

此方法中的使用ElementRef方法不应使您的角度应用程序面临安全风险.有关此引用者的更多信息,请参阅ElementRef安全风险角度2


是否需要'不听'onDestroy?或者Angular会照顾它吗?
@MehmetGunacti:好问题.答案是**YES**,你应该在调用ngOnDestroy时不听.我会用这个更新答案.只需要引用``this.renderer.listen``就像``globalInstance = this.renderer.listen ...``并在之后调用它:``ngOnDestroy(){this.globalInstance();}``

3> Hans Tiono..:

HostListener应该是将事件绑定到组件的正确方法:

@Component({
  selector: 'your-element'
})

export class YourElement {
  @HostListener('click', ['$event']) onClick(event) {
     console.log('component is clicked');
     console.log(event);
  }
}

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有