AngularJs 应用程序无法监听来自另一个窗口的 localStorage 更改
Posted
技术标签:
【中文标题】AngularJs 应用程序无法监听来自另一个窗口的 localStorage 更改【英文标题】:AngularJs app cannot listen to localStorage changes from another window 【发布时间】:2017-06-14 13:14:38 【问题描述】:在我的 AngularJS 应用程序中,两个窗口通过 localStorage 进行通信,以便使用单个 websocket 连接。主窗口侦听来自服务器的消息,将传入数据放入 localStorage 属性。子窗口在此属性上使用角度 $watch 将传入数据放入网格中。要求使用不同的窗口和单个连接。
问题是在浏览器开发工具(F12)没有打开之前,子窗口的控制器似乎无法观察到localStorage属性。
我该如何解决这个问题?
【问题讨论】:
对不起,如果这个问题很愚蠢;但是两个窗口是否来自同一来源? 您如何管理您的存储空间?你在使用 ngStorage 吗?或者直接js存储 可以分享$watch
函数
@aorfevre:是的,子窗口可以从主窗口内的按钮打开并指向同一个原点。是的,我正在使用 ngStorage 库。
【参考方案1】:
我有一个 Angular 项目,也使用 localstorage 和 localforage.js。不过,这句话确实将您的问题缩小到了开发工具上,不是吗?:
“直到浏览器开发工具(F12)没有打开。”
确保未选中此框。
重新加载页面并重试。
或者你可以试试这个解决方案:Using localstorage checks in a different window using window.postMessage()
我们的 QA 团队报告了几个错误,原因是使用本地存储打开了两个窗口,因此数据访问必须紧密同步。因此子窗口会将数据发送给处理本地存储的父窗口。
【讨论】:
谢谢,但取消选中“禁用检查”不起作用。我会更好地解释:当我打开子窗口时,网格被 localStorage 中的数据填充,但它无法获取更新。然后,如果我打开开发者工具,它就会开始获取更新。然后,如果我失去了子窗口的焦点,它就不会得到更新。如果我重新打开开发者工具,它会再次开始工作。 你有没有和这里提到的一样的错误?:***.com/a/42975984/6254070你使用的是哪个浏览器?以上是关于AngularJs 应用程序无法监听来自另一个窗口的 localStorage 更改的主要内容,如果未能解决你的问题,请参考以下文章
如何监听来自第 3 方 DLL 的表单的“Form.Shown”和“Window.Closing”?