javascript - 在 Angular 中监听自定义 DOM 事件

标签 javascript html angular typescript

我使用一个 Angular 库,它有一个组件,它使用 CustomEvents 来调度一些东西,如下所示:

const domEvent = new CustomEvent('unselect', {
   bubbles: true
});
 this.elementRef.nativeElement.dispatchEvent(domEvent);

如何在父组件中收听此事件?

我知道这是不鼓励的,我通常应该使用 EventEmitters .但是我无权覆盖子组件并且没有@Output事件定义。所以这是我唯一可以使用的东西。

最佳答案

您可以使用HostListener监听此自定义事件。以下示例从子组件触发自定义事件,其中父组件监听该事件。您甚至可以使用 args(第二个参数),例如 ['$event.target']以确定触发事件的元素。

这使用 ngAfterViewInit()生命周期钩子(Hook),但这只是为了演示,只是为了确保元素 ref 已准备好。

家长:

import { Component, HostListener } from '@angular/core';

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ]
})
export class AppComponent  {
  name = 'Angular';

  @HostListener('unselect', ['$event.target'])
  onUnSelect(el) {
    console.log(el); // element that triggered event, in this case HTMLUnknownElement
    console.log('unselect triggered');
  }
}

child :
import { Component, Input, ElementRef, AfterViewInit } from '@angular/core';

@Component({
  selector: 'hello',
  template: `<h1>Hello {{name}}!</h1>`,
  styles: [`h1 { font-family: Lato; }`]
})
export class HelloComponent {
  @Input() name: string;

  constructor(private el: ElementRef) {}

  ngAfterViewInit() {
    const domEvent = new CustomEvent('unselect', { bubbles: true });    
    this.el.nativeElement.dispatchEvent(domEvent);
  }
}

这是 example在行动。

希望这会有所帮助!

关于javascript - 在 Angular 中监听自定义 DOM 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53397035/

相关文章:

Javascript 重新加载页面

JavaScript 图像弹出窗口

html - anchor 链接不适用于桌面但适用于移动设备

javascript - 使用 Serialport nodejs 模块向客户极显示 COM2 发送命令

javascript - 获取 *ngFor 中的对象字面量顶级名称

javascript - 第二次单击后单击删除添加的类

javascript - 在不同实例之间共享nodejs中的对象

javascript - Bootstrap 日期选择器在文本区域中不起作用

javascript - 如何在谷歌时间线图表中加载有关点击事件的一些信息

angular - 拆分login.component和app.component