我们有一个Angular 6
应用,该应用由类似Excel的网格组成。当用户更新一个网格时,myFunction()
运行,并且从另一个组件运行,我们需要能够判断myFunction()
是否仍在进行中。
我找到了使用RXJS
BehaviorSubject
的解决方案。然后,我意识到该解决方案不会在浏览器选项卡之间持久化(因为每个选项卡都是其自己的Angular实例)。这是一个问题,因为用户可能在一个监视器上打开一个网格,而在另一个监视器上打开另一个网格。
因此,我找到了此@HostListener解决方案https://stackoverflow.com/a/45638992/6647188,但是我不知道如何将我的BehaviorSubject
逻辑转换为该策略。也许除了localStorage
之外,还有保存和订阅@HostListener
的替代方法,所以我不必使用事件吗?否则,我可以尝试将@HostListener
与我自己的自定义手动发出的事件一起使用,尽管我也不知道该怎么做。我的代码:
组件1(US Dollars grid
):
myFunction() {
self.myService.isFunctionStillRunningBehaviorSubject.next(true);
this.get(path).subscribe (
data = > {
self.myService.isFunctionStillRunningBehaviorSubject.next(false);
}
);
}
组件2(Euros grid
):
public subscription;
ngOnInit() {
this.myService.isFunctionStillRunningObservable.subscribe(
data => {
if (data === true) {
console.log("myFunction() is still running!");
}
}
);
}
我的服务:
import { Observable, BehaviorSubject } from 'rxjs';
public isFunctionStillRunningBehaviorSubject = new BehaviorSubject<boolean>(null);
public isFunctionStillRunningObservable = this.isFunctionStillRunningBehaviorSubject.asObservable();
即使使用localStorage,我仍然无法确定该功能是否在进行中,如果它是由其他人在另一台计算机上启动的,但是就每个用户而言,localStorage可能就足够了。