angular - 使用 Angular Service Worker 预取 API 数据(dataGroups)
问题描述
我有一个需要离线工作的 Angular 网站。它需要的部分内容是来自 API 的一些数据。这可能是陈旧的数据,所以我的策略是尝试 API,如果失败,则从缓存中获取它。
我使用以下设置dataGroups
:
"dataGroups": [
{
"name": "offlineData",
"urls": [ "/api/offline" ],
"cacheConfig": {
"maxSize": 1000,
"maxAge": "100d",
"timeout": "500u",
"strategy": "freshness"
}
}
]
但是,如果用户安装应用程序(使用清单)并立即离线,则 API 数据不会存在于缓存中,因为 dataGroups 不会预取。
那么我应该挂钩并获取数据的正确位置在哪里?我已经在app.component
, 和 ServiceWorker 更新服务中尝试过(这实际上与app.component
从那里调用的相同)。
无论哪种方式,这似乎都是在处理服务工作者配置之前调用 API ,因此它不会被添加到缓存中。
什么是适当的生命周期钩子来添加它,以便它执行prefetch
ngsw 配置将知道的?
解决方案
在应用程序初始化时,您可以将数据添加到localstorage。localstorage 以选项卡方式存储数据。这意味着每个选项卡都将在本地存储中具有其特定数据。
所以当api由于网络连接失败时。您可以使用存储在localstorage中的数据。
推荐阅读
- postgresql - AWS、RDS:如何使用硬盘文件将 +40GB Postgres 数据库从 AWS ec2 实例迁移到 RDS?
- java - 使用 Mockito 模拟类时出现 NullPointerException
- python - 将字符串转换为日期时间 - python 数据框
- azure - 在 Azure 应用服务中为多个虚拟应用配置 AspNetCoreModuleV2
- ruby - `selenium-webdriver` ruby gem 无法在 Ubuntu 14.04 上与 chromedriver 连接
- c++ - QSerialPort 无法打开,错误代码为 11
- vb.net - 如何从 URL 传递值
- python - 使用该数据帧的三列之间的比较过滤数据帧
- java - 我想使用 Fluent 等待根据元素的存在返回 true 或 false,该怎么做?
- git - 在 Android Studio 中登录了错误的 Git 帐户