【发布时间】:2019-10-04 22:58:01
【问题描述】:
当前堆栈:Angular 1.6、BreezeJS(处理离线/在线)、.net web api、azure sql
迁移到 Stack:Angular 5、NgRx(处理离线/在线)、.net core Web API、Azure SQL
背景: 我有一个必须离线/在线工作的网络应用程序。当用户处于连接环境中时,我使用 Web Worker 为他们正在处理的项目提取最新数据并将该数据存储在本地存储中。当他们离线时,我从该本地存储推送/拉取数据以允许用户离线工作。目前,该系统是使用 Angular 1.6 构建的,BreezeJS 在离线时处理元数据实体,并在重新在线后进行后续同步。这很有效,因为 BreezeJS 在处理所有离线元数据和后续同步方面做得非常透明和一致。
我需要将系统升级到 Angular 5,并且我想从堆栈中删除 BreezeJS(主要是因为他们没有为 Angular 构建的打字稿更新,而且似乎没有任何创建的计划)但我没有确定如何处理离线数据以及将离线数据同步到在线。我目前的计划是用 NgRx 代替 BreezeJS。
我正在考虑在离线时使用 Service Worker 将请求转储到本地存储的队列中,同时更新当前存储(通过不同的操作使用 ngrx,将记录表示为未确认)无论如何。然后当用户重新上线时,我运行请求队列,然后在响应正常进入时更新用户的本地存储。我还将更新我的网络工作者,以便他们在数据检索时推送更新ngrx 存储的操作,然后将其内容转储到本地存储,以便在需要时可以离线使用。
问题: 我意识到我实际上是在强迫 NgRx 离线/在线工作。这是对 NgRx 库的良好使用,还是将该库脱离上下文并将其用于它从未打算用于的东西?
是否存在现有的生产就绪和维护库,用于处理 Angular 应用程序中的离线数据和同步?
提前感谢您的帮助。
【问题讨论】:
-
我了解 Breeze 确实可与 Angular v2+ 一起使用。见此链接:github.com/Breeze/breeze.bridge2.angular
-
关于 ngRx,不支持开箱即用的离线场景。已经添加了这样的库:github.com/btroncone/ngrx-store-localstorage
-
关于在 Angular 中处理离线数据,你看过 service worker 吗?见此链接:blog.angulartraining.com/…
-
@DeborahK - 是的,我看到了那个桥,但如果我使用微风,我会希望创建原始版本的小组支持它。这就是为什么我想远离它。我正在使用服务人员来处理我的资源缓存,如果没有网络连接,我还会将请求定向到离线存储。