javascript - 跨文档/窗口 AngularJS 应用程序

标签 javascript angularjs google-chrome-app

我正在构建一个打包的 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 时可能非常有用,尤其是与对象存储和 $watchers 和/或 $interval 结合使用时> 轮询以检测应用程序实例之间的更改。

更多来自 Exploring the FileSystem APIs

关于javascript - 跨文档/窗口 AngularJS 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23876013/

相关文章:

javascript - 如何将选择选项设置为等于 innerHTML

javascript - 将 jekyll 标签放入 "onclick"中断处

angularjs - 如何让 Controller 在 Angularjs 中刷新?

javascript - Angular, Material 形式只说提交尝试后需要字段

javascript - Highcharts 不会在 Chrome 应用中显示

javascript - Bootstrap : tags in input and typeahead

javascript - 从 jQgrid EditURL 返回一个值

javascript - Angular ( ionic )渲染复选框中的真实值

HTML5 文件系统 - 将文件保存在磁盘上

cordova - 使用Google Chrome打包应用构建电话差距