我使用一个 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/