如何将数据从 Service Worker 传递到 Angular JS 控制器

How to pass data from service worker to Angular JS controller

我想将通过 chrome 推送通知收到的一些数据传递到 angular js

中的控制器

我的sw.js是

self.addEventListener('push', function(event) {  
   //console.log('Received a push message', event.data.json());
   var obj = event.data.json();
   var title = obj.title;  
   var body = "Customer number : "+obj.payload.customer_number+" \nCustomer address : "+obj.payload.customer_address;  
   var icon = 'assets/images/favicon-192.png';  
   var tag = 'sfxorder';
   var sound = 'assets/audio/ping.mp3';
   event.waitUntil(  
      self.registration.showNotification(title, {  
        body: body,  
        icon: icon,  
        tag: tag,
        sound:sound ,
        vibrate: [300, 100, 400] 

        })  
      );  
  });

我正在通过上述方法接收数据,但如何将此数据传递给控制器​​?

如果您需要立即从 Service Worker 向一个或多个客户端页面发送消息,那么使用 Client.postMessage() 方法将是最好的方法。

以下是 a full sample 的摘录:

// From within your service worker, you can get a list of active clients
// and call postMessage() to communicate with any of the ones you want:
self.clients.matchAll().then(function(clients) {
  clients.forEach(function(client) {
    client.postMessage({foo: 'bar'});
  });
});


// From within your client pages, you can listen for messages via:
navigator.serviceWorker.addEventListener('message', function(event) {
  // Do something with event.data
});

如果只是想保存客户端页面以后可能用到的数据,但不需要立即通知客户端页面,保存到IndexedDB是最合适的方法。