我正在构建一个打包的 chrome 应用程序,并且想要使用 Angular。作为一个具有与 native 应用程序类似的 ui 行为的本地应用程序,我想利用多个窗口来显示弹出窗口和不同的工作流程。与对话框或模式相比,这对用户来说更加直观。
是否有一种在这些窗口之间共享服务实例的良好 Angular 方式?有没有我没有看到的不同解决方案?
更新
更清楚地说,我想在 JavaScript 窗口之间共享数据。有基本的 window.postMessage
但我希望能够在这两个单独的窗口之间共享服务实例。
可能的解决方案
我发现了一个共享服务的技巧,并在下面发布了答案。我很想对此有想法。更理想的情况可能是我可以共享 $injector
服务本身。这可能会处理所有可能的选项,并使它就像在同一个应用程序中一样。我相信 $injector 引用了 DOM 中的 rootElement,这在新窗口中当然会有所不同,因此该解决方案可能不起作用。想法?
最佳答案
Angular 不提供任何跨窗口支持或任何对于设计本地应用程序特别有用的内容。事实上,它并不真正需要,尤其是对于 Chrome 应用程序。
查看 Google 为 Chrome 应用提供的 localStorage 包装器,它提供了一些额外的便利(例如在线同步):chrome.storage 。您无法像在“普通”网络应用中那样使用 window.localStorage
,因此即使您只需要 localStorage 的基础知识,也需要使用它。
文档有点稀疏,但您可以在此处找到其使用教程,包括 Angular 示例代码:Save and Fetch Data
最后,明智的做法是通过一个或多个服务来管理此存储,就像您倾向于 AJAX 调用/外部数据资源一样,以便在 Controller 之间封装和重用。
更新:
根据下面 @Xan 的评论,您还可以考虑 FileSystem API,它可以为您的应用程序提供以下功能
create, read, navigate, and write to a sandboxed section of the user's local file system
根据您的应用的需求,这在处理较大的数据 block 时可能非常有用,尤其是与对象存储和 $watch
ers 和/或 $interval
结合使用时> 轮询以检测应用程序实例之间的更改。
关于javascript - 跨文档/窗口 AngularJS 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23876013/