Angular PWA 离线存储

2024-05-11

我正在构建一个新的 Web 应用程序,即使没有互联网连接,它也需要无缝工作。我选择了 Angular 并正在构建一个 PWA,因为它具有使应用程序离线工作的内置功能。到目前为止,我已经让服务工作人员完美工作并由清单文件驱动,这很好地缓存了静态内容,并且我已将其设置为缓存一堆我想在应用程序离线时使用的 API 请求。

除此之外,我还使用 localStorage 来存储用户离线时调用 put、post 和 delete API 请求的尝试。重新建立互联网连接后,存储在 localStorage 中的请求将被发送到服务器。

到目前为止,在我的概念验证中,用户可以在离线状态下访问内容、编辑数据,并且一旦用户的互联网连接重新建立,数据就会与服务器同步。但这就是我的困境开始的地方。根据清单文件中的定义,Service Worker 自动缓存 API 请求数据,并且有一个单独的数据存储用于离线时的数据编辑。这会导致用户编辑一些数据、保存数据、刷新页面并且数据由 Service Worker 缓存的 API 提供服务的情况。

是否有内置机制来更新 Service Worker 自动缓存的 API 数据?我不想尝试手动取消选择它,因为它看起来很老套,而且我无法想象随着服务工作人员的发展它会成为未来的证明。

如果没有标准方法来实现我需要做的事情,那么开发人员通常会通过手动将所有离线数据存储在 IndexedDB/localStorage 中来完全控制离线数据吗?也就是说,我可以调用 API 请求并编写一些代码,将结果以结构化格式缓存在 IndexedDB 中以形成离线数据库,然后每当用户编辑某些数据时写回到离线数据库,并在用户返回时上传任何数据编辑在线的。我不认为这样做会出现任何技术问题,只是似乎需要付出很大的努力才能实现我希望成为标准功能的东西。

我对使用 Angular 进行开发还很陌生,但拥有多年的其他开发经验。因此,如果我问了明显的问题,请原谅我,我似乎找不到一篇关于与 Service Worker 一起使用数据存储的最佳实践的好文章。

Thanks


我有一个项目,我的用户可以在离线时编辑本地数据,我使用Cloud Firestore https://firebase.google.com/docs/firestore/manage-data/enable-offline使本地数据库缓存可用。如果我理解正确的话,这正是您的要求。

该解决方案的好处是,只需一行代码,您不仅可以获得本地数据库,而且一旦客户端再次上线,所有离线所做的更改都会自动同步到服务器。

firebase.firestore().enablePersistence() 
  .catch(function(err) {
      // log the error
  });

// Subsequent queries will use persistence, if it was enabled successfully

如果您可以选择使用此 NoSQL 数据库,我会选择它,否则您需要自己实现本地更新,因为没有内置的解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular PWA 离线存储 的相关文章

  • Service Worker 更新延迟

    我有一个正在运行的 Web 应用程序 它依靠服务工作人员来检查所有缓存的文件并确保用户使用正确的应用程序版本 我们的客户目前希望设备在特定点 重新打开应用程序时 等检查更新 因为目前当您打开应用程序时 设备最多可能需要 5 分钟才能意识到其
  • Service Worker 可以缓存 POST 请求吗?

    我尝试在 fetch 事件的服务工作人员中缓存 POST 请求 I used cache put event request response 但返回的承诺被拒绝TypeError Invalid request method POST 当
  • 更改后,Angular 8 值不会在视图上更新

    我在 Angular 中有一个小组件 它的方法 目前 设置超时并更改变量的值 import Component ChangeDetectionStrategy from angular core Component selector my
  • Service Worker 破坏 301 重定向

    我在 WordPress 网站上使用 Service Worker 它搞乱了来自的重定向https example com page https example com page to https example com page http
  • PWA:重定向到子域时显示地址栏

    我有一个有时使用子域的 PWA 当应用程序重定向到另一个子域时 我发现出现问题 地址栏显示 这会影响类似应用程序的体验 有人知道使用子域时隐藏地址栏的解决方案吗 重定向到子域时我也遇到了类似的问题 当 PWA 未正确设置为像应用程序一样运行
  • Open Shift Angular 8 应用程序内存不足问题

    我正在为 openshift Angular 8 应用程序使用 Modern Web App 映像 但应用程序因 npm build 内存不足问题而失败 错误日志 usr libexec s2i assemble 第 62 行 296 被杀
  • 如何在React项目中添加Service Worker

    我想在我的 React 项目中添加 Service Worker 项目已准备就绪 默认服务似乎不起作用 即使当我尝试导入它时 它也会出现以下错误 尝试导入错误 registerServiceWorker 不包含默认导出 导入为 regist
  • 在 Chrome Android 中全屏运行的 PWA 不支持显示模式:独立

    这两种方法都没有用于检测standaloneChrome Android 中的模式在我的 PWA 中工作 https licitaciones chilediseno org 这是我尝试过的CSS方法 media all and displ
  • 请确保您的 Service Worker 文件包含以下内容:/(const precacheManifest =)\[\](;)/

    我对 React Workbox 还很陌生 我试图让我的 Electron React 应用程序能够缓存所有图像和数据 以便在离线时可用 这正是我在 YouTube 视频中想要实现的目标 14 00 到 21 00 分钟 使用 React
  • 如何为 pwa 添加自定义安装按钮

    我想添加自定义install网站内我的渐进式网络应用程序的按钮 我红色了很多文章并尝试了他们提供的答案 他们使用beforeinstallprompt let deferredPrompt window addEventListener b
  • 有没有办法在 Google Play 上提交reactjs PWA?

    我想使用 一次编写 到处运行 所以我用create react app在reactjs中创建了一个PWA 我的应用程序运行良好 我可以将其从网站放在手机的主屏幕上 不过 我也希望在移动商店中可见 从 Google Play 开始 I tri
  • HammerJS 滑动不适用于具有溢出 css 属性的元素

    EDIT 该片段在嵌入问题时工作正常 但在编辑时则不然 这让我意识到这与可以滚动的底层容器有关 我在手机上测试了这一点 锤子在没有滚动条的小区域上工作得很好overflow财产 我更新了代码片段以反映这一点 问题是 如何让它在需要垂直滚动的
  • 如何编辑 Angular CLI 项目的 Service Worker 文件

    我已经添加了 angular pwa使用以下命令打包到我的 Angular CLI 项目ng add angular pwa project project name 所以它变成了一个渐进式 Web 应用程序 这增加了我认识的服务人员 我想
  • 在 Facebook 浏览器中更新 Service Worker

    遇到了一个问题 我们的一些用户在我们网站的 Facebook 浏览器中存在有问题的 Service Worker 问题 当 Facebook 应用程序用户访问我们在 FB 上共享的页面时 他们会在 FB 浏览器上看到我们的 您离线页面 该错
  • Angular Service Worker,缓存离线应用程序的 api 调用

    我正在尝试让服务工作者以角度方式处理 API 请求 我希望该应用程序能够离线工作 并且我有以下配置 name api urls https x com cacheConfig strategy performance maxSize 20
  • 带有 Angular 8 自定义 webpack 配置的 svg-sprite-loader

    我正在尝试使用自定义 webpack 配置将 svg sprite loader 包 用于创建 svg sprite 与我的 Angular 8 项目一起使用 我正在使用以下自定义配置 const SpriteLoaderPlugin re
  • 如何使用 Laravel Mix 和 WorkBox?

    我正在尝试为我的应用程序构建一个 PWA 并花了近 48 小时试图弄清楚如何将 Workbox 与 Laravel Mix 结合使用 具有讽刺意味的是 谷歌说 Workbox 是为了让事情变得简单 Buh 好吧 到目前为止我已经弄清楚了 我
  • 无法绑定,因为它不是选择器组件的已知属性

    我想将变量从一个组件传递到另一个组件 并且我正在使用 input 这是我的父组件 Component selector aze templateUrl aze component html styleUrls aze component s
  • 手动重播由 workbox-background-sync 排队的请求

    我正在我的 PWA 应用程序中提供离线支持 我在用workbox https developers google com web tools workbox modules workbox sw为了那个原因 这是我当前的代码 const a
  • Angular:先完全安装 Service Worker

    我正在用 Angular 编写一个 PWA 需要准备好从单页加载中离线 Service Worker 生命周期的文档指定 Worker 已安装但不会立即激活 https developers google com web fundament

随机推荐

  • AAR 可以包含传递依赖吗? [复制]

    这个问题在这里已经有答案了 现在我有一个库项目 比如项目 Foo 它依赖于像 OkHttp 这样的库 现在 Foo 有一个 Maven 构建步骤 可以生成 AAR 并将其推送到公共位置 现在假设我有项目 B 我们将其称为 Bar Bar是一
  • Azure函数插入但不更新cosmosDB

    我有一个 azure 函数 从 Azure 服务总线队列接收消息并将文档发送到 cosmosDB 我正在使用 Azure 函数 1 x public static class Function1 FunctionName Function1
  • 如何重命名 SQL Server 中名称中带有方括号的内容?

    我的一张桌子上有一列 周围有方括号 Book Category 我想重命名为Book Category 我尝试了以下查询 sp rename BookPublisher Book Category Book Category COLUMN
  • 使用 cmake 将两种解决方案合二为一

    我有两个单独的 Visual Studio 2013 解决方案 我想将它们迁移到一个解决方案中 因为第一个解决方案 使用 Qt 充当第二个解决方案的 GUI 最后 我希望有一个结构如下的单一解决方案 Solution All Build P
  • 应在堆栈上分配的最大数量

    我一直在寻找堆栈溢出有关应在堆栈上分配的最大内存量的指南 我看到了堆栈与堆分配的最佳实践 但没有关于应该在堆栈上分配多少以及应该在堆上分配多少的指南 有什么想法 数字可以作为指导吗 什么时候应该在堆栈上分配 什么时候应该在堆上分配 多少才算
  • 从具有相同属性的另一个对象创建对象

    我有一个 C 对象 可以说有 20 个属性 它是数据契约的一部分 我还有另一个具有类似属性的业务实体 我想从响应对象中填充该实体 除了将一个对象的每个属性分配给另一个对象的相应属性之外 还有其他方法可以做到这一点吗 是的 看看自动映射器 h
  • Android JobScheduler 每天只运行一次

    我检查了 JobScheduler API 它可以从 Android API 级别 21 开始使用 我想安排一个需要互联网并且每天仅运行一次或可选每周运行一次的任务 如果成功执行 我没有找到关于这种情况的例子 有人能帮我吗 谢谢 针对您的问
  • 我们应该在“编程基础”课程中教授指针吗?

    明年秋季 我将教授编程基础知识课程 即一年级计算机科学课程 在这样的课程中教授指针的优点和缺点是什么 我的立场 应该教导他们 Edit 我对 迎合你的观众 论点的问题是 在大学的头几年 我们 教授 不知道学生是否想成为科学家 我们希望我们知
  • 使用 Maven 插件测试工具测试 Mojos 的默认值和表达式:

    我在使用 Maven 插件测试工具 2 0 alpha1 时遇到问题 当我想测试 Mojo 时 参数的默认值和表达式不适用 我有以下参数 p The output file to write the settings to p parame
  • 在 ASP.NET 中创建自定义文化

    我想在 App GlobalResources 文件夹中创建一个名为 shopping en sg resx 的新加坡英语 en sg 资源文件 我在编译过程中遇到错误 错误 1 命名空间 资源 已经包含了一个定义 购物 c WINDOWS
  • 产品和变体 - 设计数据库的最佳方法

    描述 商店可以有产品 鞋子 T 恤等 每个产品可以有许多变体 每个变体可以有不同的价格和库存 例如T 恤有不同的颜色和尺寸 颜色 蓝色 尺寸 L 价格 10 美元 库存 5 颜色 蓝色 尺寸 XL 价格 10 美元 库存 10 颜色 白色
  • 在 C# 命令行应用程序中包含并执行 EXE

    所以我找到了一个很棒的小 EXE 命令行应用程序 我们将其称为 program exe 它输出一些我想用 C 操作的数据 我想知道是否有一种方法可以将program exe 打包 到我的Visual Studio项目文件中 这样我就可以将编
  • Chrome 84+:网站想要打开此应用程序:处理程序

    我进行了以下修复 每次都在 Chrome 中打开所需的应用程序而无需确认 他们工作得很好 直到更新版本 84 0 4147 89 官方版本 64 位 Fix 1 In C Users
  • 如何在画布中旋转图表同时保持数字垂直?

    我正在尝试围绕其中心旋转画布中的图表 同时保持字母直立 我正在尝试使用 ctx rotate 但它使用画布的左侧作为中心来旋转整个图表 以下链接提供了视觉效果 我希望它看起来像绿色 而不是红色 就像我的代码当前所做的那样 视觉解释 http
  • 调试错误:在 vc++ 项目中使用 COM 时发生 所需的运行时?

    我为我的工作创建了一个 COM 组件 我也注册了该组件 在我的系统上 我有两个虚拟机工作站 在我的第一个工作站中 它运行良好 在我的第二个工作站中 它显示一个包含消息的错误框该程序需要一段时间并以不寻常的方式关闭 请联系应用程序管理员 我认
  • 如何在 HashSet 或 HashMap 中使用自定义哈希函数?

    由于 SipHasher 对于我的用例来说太慢 因此我尝试实现自定义哈希函数 我发现一个例子 https github com rust lang rust blob master src librustc util nodemap rs我
  • 意外的 const 引用行为

    include
  • 如何在 Firefox 和 IE 中获得 user-modify:read-write-plaintext-only 行为

    Chrome Safari 支持 CSS webkit user modify read write plaintext only 它可以禁止用户将富文本粘贴到 contenteditable div 中 我不知道如何在 Firefox 和
  • 使用基于Optional内容的流

    我从不受我控制的服务获取可能为空的地图 并且想要处理它 比方说 过滤 映射并减少到我需要的单个元素 问题 是否有从Optional到Stream的 链接 我尝试过 除其他外 return Optional ofNullable getMap
  • Angular PWA 离线存储

    我正在构建一个新的 Web 应用程序 即使没有互联网连接 它也需要无缝工作 我选择了 Angular 并正在构建一个 PWA 因为它具有使应用程序离线工作的内置功能 到目前为止 我已经让服务工作人员完美工作并由清单文件驱动 这很好地缓存了静