我正在尝试将 service-worker 与我的 Angular 应用程序一起使用。它是使用 webpack 构建的。
我使用 workbox-webpack-plugin。我想为我的 GET API 调用提供缓存服务,并在后台更新数据。
为此,我将选项runtimeCaching
与处理程序一起使用staleWhileRevalidate
(有关 GenerateSW 插件的更多详细信息,请点击此处)
这是我在 webpack.config.js 中的配置:
new GenerateSW({
// importWorkboxFrom: 'local',
clientsClaim: true,
skipWaiting: true,
navigateFallback: '/index.html',
runtimeCaching: [
{
// Match any same-origin request that contains 'api'.
urlPattern: /https:\/\/api.*/,
handler: 'staleWhileRevalidate',
options: {
cacheName: 'api',
broadcastUpdate: {
channelName: 'api-updates',
},
// Add in any additional plugin logic you need.
plugins: [],
},
}
]
}),
根据这个文档,我应该能够在缓存更新时收到一个事件(我想向用户显示一些东西,以便他可以刷新数据)。
接收数据的代码如下所示:
export class AppComponent implements OnInit {
public ngOnInit() {
console.log( 'AppComponent - ngOnInit' );
const updatesChannel = new BroadcastChannel('api-updates');
updatesChannel.addEventListener('message', async (event) => {
console.log('Event received');
});
}
}
我将此代码放在我的一个 Angular 组件中,即使我确定缓存已更新,它也从未被调用过。
我认为这可能与更改检测在 Angular 中的工作方式有关(如本问题中所述),但我不确定如何修复它。
有没有人设法成功收听来自 Angular 组件的广播事件?