我正在尝试使用BroadcastChannel API在两个浏览器选项卡/窗口之间进行通信。通信似乎在两个角度服务实例之间工作,但未显示对可观察值的更改。我正在尝试主要使用async
管道来实现这一目标。
我有两个使用路由器显示的组件。(control
和display
)
我有一个服务 ( MessagingService
),我有一个BehaviorSubject
和BroadcastChannel API
- 通信。该服务被注入到这两个组件中。
export class MessagingService {
private _value = 1;
valueSubject: BehaviorSubject<number> = new BehaviorSubject<number>(this._value);
value$: Observable<number> = this.valueSubject.asObservable();
private bc: BroadcastChannel = new BroadcastChannel('controlChannel');
constructor() {
this.bc.onmessage = this.handleEvent;
}
当我打开两个选项卡(一个 in/control
和一个 in /display
)时,我可以增加 in的值并在控制台/control
中接收新值,/display
但不会更新这些值。
捆绑:<p>service value: {{ messenger.value$ | async }}</p>
注射:constructor(private messenger: MessagingService) { }
所以问题是,我做错了什么?我进行了额外的订阅display
并触发了next
调用,但异步绑定没有得到更新。我还在MessageEvent
同一个选项卡中看到正确的数据值正确。
编辑:附加测试表明,当按下更改本地值的按钮时,值会更新。所以这似乎是变更检测的问题。