2017-01-11 7 views
0

Ich möchte einige Daten passieren passieren, die ich durch Chrom-Push-Benachrichtigung an mein Controller in Winkel js empfangenWie man Daten von Servicemitarbeiter zu Angular JS Controller

mein sw.js ist

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] 

     }) 
    ); 
    }); 

I Ich empfange die Daten in obiger Methode, aber wie übergebe ich diese Daten an den Controller?

+0

Sie können diesen Code direkt in den Controller einfügen (ersetzen Sie 'self' durch' window') und Sie sollten auf die Variablen des Controllers zugreifen können (Sie müssen '$ apply' aufrufen um mit den Angular Zyklen zu synchronisieren) . – ValLeNain

+0

Ich habe versucht, Ihre Lösung, aber es funktioniert nicht ... –

+0

@mallip haben Sie die Lösung bekommen, können Sie hier einen Code teilen? Vielen Dank . –

Antwort

0

Wenn Sie von einem Service-Mitarbeiter sofort eine Nachricht an eine oder mehrere Client-Seiten senden müssen, wäre die Verwendung der Methode Client.postMessage() der beste Ansatz.

Hier ist ein Auszug aus 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 
}); 

Wenn Sie nur Daten speichern möchten, die später durch eine Client-Seite verwendet werden könnten, aber Sie brauchen nicht auf die Client-Seite sofort, die Einsparung benachrichtigen es zu IndexedDB wäre der am besten geeignete Ansatz.

+0

Ich möchte den Sound wiedergeben, wenn die Push-Benachrichtigung empfangen wird. Einige, wie ich eine Methode von meinem Controller anrufen muss, um den Ton zu spielen, wenn Nachricht empfängt. Ich habe versucht, Ihre Lösung es funktioniert, wenn mehrere Tabs öffnen, wenn ein Tab geöffnet ist funktioniert nicht –

+0

Got it. es funktioniert, danke für deine Antwort, es bringt mich in die richtige Richtung. Danke an (http://stackoverflow.com/questions/35100759/serviceworkers-focus-tab-clients-ist-empty-on-notificationclick) –

Verwandte Themen