javascript - 是否可以使用 rxjs angular 5 在其他选项卡浏览器中订阅 observable

标签 javascript angular typescript rxjs

我有一个 Angular 应用程序,有两个页面,我在浏览器的每个选项卡中打开它们,如果我在第 1 页中执行某些方法,我希望第 2 页使用 rxjs 订阅数据更改并实时更新第 2 页中的数据应用程序,没有 websocket 有什么办法可以做到这一点吗?我已经尝试过订阅方法,但只有第 1 页收听订阅。 这是第 1 页调用刷新方法来更新 bool 值

this.service.doRefresh();

第2页听

this.service.$refresh.subscribe(x=>{//boolean value changed by page 1(tab1)
    if(x) {
        console.log(x);
        this.service.stopRefresh();
    }
});

最佳答案

您实际上可以将事件监听器添加到 localStorage,这样您就可以使用 localStorage 在选项卡之间“传递消息”

localStorage.setItem('yourKeyName', true)

window.addEventListener('storage', (event) => {
   if (event.key == 'yourKeyName'){
      //update data
   }
});

因此,当您在一个页面上更改 localStorage 中某些内容的值时,另一个页面可以订阅它更改的事件

浏览器支持和更多信息:https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage#Browser_compatibility

关于javascript - 是否可以使用 rxjs angular 5 在其他选项卡浏览器中订阅 observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50129392/

相关文章:

javascript - 在页面加载时单击页面上的元素

javascript - 如何在不重新加载页面的情况下使用ajax聊天网站

javascript - Mat-Select 返回未定义

angular - i18n 国际化如何服务或构建多语言

javascript - 控制台错误 : ng. 探测不是函数

javascript - 如何解决错误 : "undefined is null or not object ie in ext js" in IE?

javascript - 带点符号的 ES6 符号

typescript - 是否可以为具有可变深度的嵌套对象定义类型?

typescript - Visual Studio 2022 Typescript 智能感知

typescript - Rollup + Typescript + 将图片加载为 base64