1

私のアプリにを実装しています。ブラウザ(Chrome)で通知を表示するサービス担当者を作成しました。サービス担当者とAngular.jsのコントローラを連絡するには

ここで、角型コントローラの内部にある関数を呼び出す必要があります。私はこのようなイベントを私のサービスワーカーにしようとしていました。

self.addEventListener('push', function(event) { 
event.waitUntil(
    fetch(self.CONTENT_URL, {headers: headers}) 
    .then(function(response) { 
    if (response.status !== 200) { 

    } 
    return response.json().then(function(data) { 

     /* some stuff*/ 

     document.dispatchEvent('myEvent'); 

     return notification; 
    }); 
    }) 
); 
}); 

この場合、通知を処理してイベントを使用しようとしています。

私は

document.addEventListener('myEvent', function(){ 
console.log("im here"); 
}); 

以下のコードを書いたコントローラで

しかし、ブラウザは、このタスクを完了するために()

任意のアイデアはconsole.logが表示されませんか?どうもありがとう!どこかの角アプリでここ

+0

'dispatchEvent()'のドキュメントを読んでください。イベントオブジェクトはありません。コンソールでそのイベントコードを実行するだけで、エラーがスローされます。 – charlietfl

+0

はい代わりに角度イベントを使用したいが、サービスワーカーは角度ファイルではありません –

答えて

2

私は(ウィンドウ/ドキュメント側か何か)の角度との間の通信のために何をしたかされるサービスの労働者との


if ('serviceWorker' in navigator) { 

    // ensure service worker is ready 
    navigator.serviceWorker.ready.then(function (reg) { 

    // PING to service worker, later we will use this ping to identifies our client. 
    navigator.serviceWorker.controller.postMessage("ping"); 

    // listening for messages from service worker 
    navigator.serviceWorker.addEventListener('message', function (event) { 
     var messageFromSW = event.data; 
     console.log("message from SW: " + messageFromSW); 
     // you can also send a stringified JSON and then do a JSON.parse() here. 
    }); 
    } 
} 

あなたのサービスワーカー

let angularClient; 
self.addEventListener('message', event => { 
    // if message is a "ping" string, 
    // we store the client sent the message into angularClient variable 
    if (event.data == "ping") { 
    angularClient = event.source; 
    } 
}); 

の開始時に、あなたはpush

を受信した場合
// In your push stuff 
self.addEventListener('push', function(event) { 
event.waitUntil(
    fetch(self.CONTENT_URL, {headers: headers}) 
    .then(function(response) { 
    if (response.status !== 200) { 

    } 
    return response.json().then(function(data) { 

     /* some stuff*/ 

     angularClient.postMessage('{"data": "you can send a stringified JSON here then parse it on the client"}'); 

     return notification; 
    }); 
    }) 
); 
}); 
+1

素敵な男です! – MarBVI

関連する問題