import { NgModule } from '@angular/core'; import { ServiceWorkerModule } from '@angular/service-worker'; import { environment } from '../environments/environment';
@NgModule({ imports: [ ServiceWorkerModule.register('ngsw-worker.js', { enabled: environment.production }) ], ... }) export class AppModule { }
self.addEventListener('fetch', event => { event.respondWith( caches.open('my-app-name').then(cache => { return cache.match(event.request).then(response => { const fetchPromise = fetch(event.request).then(networkResponse => { cache.put(event.request, networkResponse.clone()); return networkResponse; }); return response || fetchPromise; }) }) ); });
self.addEventListener('activate', event => { event.waitUntil( caches.keys().then(cacheNames => { return Promise.all(cacheNames.map(cacheName => { if (cacheName !== 'my-app-name') { return caches.delete(cacheName); } })); }) ); return self.clients.claim(); });
import { Component, OnInit } from '@angular/core'; import { SwUpdate } from '@angular/service-worker';
@Component({ selector: 'app-root', template: '
export class AppComponent implements OnInit {
title = 'Angular Service Worker Example';
constructor(private swUpdate: SwUpdate) { }
ngOnInit() { if (this.swUpdate.isEnabled) { this.swUpdate.available.subscribe(() => { if (confirm('New version available. Load new version?')) { window.location.reload(true);