【问题标题】:is it possible to subscribe observable in other tab browser with rxjs angular 5是否可以使用 rxjs angular 5 在其他选项卡浏览器中订阅 observable
【发布时间】:2018-10-12 06:05:07
【问题描述】:

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

this.service.doRefresh();

第 2 页收听

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

【问题讨论】:

  • 没有每个标签都有自己的应用实例。
  • 那么,在没有 websocket 的情况下,我可以做些什么来制作简单的刷新数据?
  • 一种方法是从 tab1 更新 Firebase 实时数据库,然后 tab 2 将自动推送到更新。
  • 一种认为不用请求后端就可以使用的方法是使用BroadcastChannel

标签: javascript angular typescript rxjs


【解决方案1】:

您实际上可以将事件侦听器添加到 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

【讨论】:

  • ok,我会尝试一下并在尝试上述代码后向你们发送更新
  • @Mamen 你有机会尝试吗?如果您对此有更多疑问,请告诉我
  • 是的,你是对的,我们可以使用本地存储订阅,这是我用于我的项目的 npm 包ngx-webstorage 帮助你们易于理解。谢谢
  • 非常好的和简单的解决方案!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-20
  • 2021-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多