Вы можете создать директиву для прослушивания всех событий мыши
@Directive({
selector: "[appMouseListener]"
})
export class MouseListenerDirective {
constructor() {}
private enterSub = new Subject<MouseEvent>();
public enter = this.enterSub.asObservable();
@HostListener("mouseenter", ["$event"]) onMouseEnter(event: MouseEvent) {
this.enterSub.next(event);
}
}
, если вам нужно, вы можете отфильтровать события, отправленные только родительскому. Это целевое событие, которое будет родительским компонентом.
export class MouseListenerDirective {
constructor(private el: ElementRef){}
public enter = this.enterSub.asObservable().pipe(filter(x => x.target === this.el.nativeElement));
...
добавьте эту директиву в родительский компонент
<parent-component appMouseListener>
<child-component></child-component>
</parent-component>
Получите доступ к событиям в дочернем компоненте, введя директиву
@Component({ // configs}
export class ChildComponent {
constructor(mouseListener: MouseListenerDirective){
mouseListener.enter.subscribe(x => console.log(x)); // don't forget to manage subscriptions
}
}