angular项目中在当前tab页中鼠标移动产生的事件信息不让其他的tab页也产生事件怎么处理
在Angular项目中,你可以使用一个共享的服务来实现鼠标移动事件只在当前的tab页中产生。
首先,创建一个名为MouseService的共享服务:
import { Injectable } from '@angular/core';
import { Observable, Subject } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class MouseService {
private mouseMoveSubject: Subject<MouseEvent> = new Subject<MouseEvent>();
constructor() { }
getMouseMoveObservable(): Observable<MouseEvent> {
return this.mouseMoveSubject.asObservable();
}
emitMouseMoveEvent(event: MouseEvent) {
this.mouseMoveSubject.next(event);
}
}
然后,在你的每个tab页组件中注入MouseService,并在鼠标移动事件中调用emitMouseMoveEvent方法:
import { Component, OnInit, HostListener } from '@angular/core';
import { MouseService } from 'path/to/mouse.service';
@Component({
selector: 'app-tab1',
templateUrl: './tab1.component.html',
styleUrls: ['./tab1.component.css']
})
export class Tab1Component implements OnInit {
constructor(private mouseService: MouseService) { }
ngOnInit() {
}
@HostListener('mousemove', ['$event'])
onMouseMove(event: MouseEvent) {
this.mouseService.emitMouseMoveEvent(event);
}
}
最后,在你的其他tab页组件中,订阅MouseService的getMouseMoveObservable方法来获取鼠标移动事件:
import { Component, OnInit } from '@angular/core';
import { MouseService } from 'path/to/mouse.service';
@Component({
selector: 'app-tab2',
templateUrl: './tab2.component.html',
styleUrls: ['./tab2.component.css']
})
export class Tab2Component implements OnInit {
constructor(private mouseService: MouseService) { }
ngOnInit() {
this.mouseService.getMouseMoveObservable().subscribe((event: MouseEvent) => {
// 处理鼠标移动事件
});
}
}
这样,只有当前的tab页中的鼠标移动事件才会被订阅到,其他的tab页不会接收到鼠标移动事件
原文地址: https://www.cveoy.top/t/topic/hHkS 著作权归作者所有。请勿转载和采集!