收到推送通知时如何更改范围变量

Posted

技术标签:

【中文标题】收到推送通知时如何更改范围变量【英文标题】:How to change scope variable when push notification received 【发布时间】:2019-06-17 09:20:28 【问题描述】:

我的网络应用中有一个通知图标,显示通知的数量。应用程序的前端是使用 angularjs 制作的。

图标的计数存储在$rootScope 变量中。我想在收到推送通知时增加变量(或调用返回计数的 Web 服务)。

serviceworker.js 文件无权访问 angularjs 中的范围变量。如何从服务人员更改计数变量的值。

我想在 localStorage 项目上添加一个更改事件侦听器。

登录后,我将创建一个项目。

localStorage.setItem('notifCount', 0);

当我收到推送通知时,我将在localStorage 中增加notifCountserviceworker.js 中,并且将触发更改事件。我可以在其中一个控制器文件中添加localStorage 更改侦听器并调用Web 服务,或者只是增加$rootScope 变量。

但即使有人在开发工具中手动更改 localStorage,也会发生这种情况。

我想知道我是否可以这样做(如果它是正确的方法)还是有更好的方法。我不觉得这是正确的方法。

【问题讨论】:

假设您在 Angular(客户端)和 service worker 之间进行了通信,您应该将 angular 变量的更新包装在 $apply 中。如果您还没有进行通信,请查看一些来自 google (craig-russell.co.uk/2016/01/29/…) 的 Service Worker 通信链接。 为此使用 locationStorage 似乎很奇怪。你可以例如在 app.run 中注册服务工作者侦听器并在那里更改 $rootScope 变量。 @PetrAveryanov 并且您无法在 serviceworker 中访问 localStorage 【参考方案1】:

数据通过消息系统在worker和主线程之间发送——双方使用postMessage()方法发送消息,并通过onmessage事件处理程序响应消息(消息包含在Message事件的data 属性。)数据被复制而不是共享。

有关详细信息,请参阅

MDN Web API Reference - Using Web Workers

【讨论】:

以上是关于收到推送通知时如何更改范围变量的主要内容,如果未能解决你的问题,请参考以下文章

收到 C2DM 推送通知时更改活动行为

如何在推送通知中更改应用程序的名称?

Flutter:数据更改时的 Firebase 推送通知

如何在 ionic 2 中更改推送通知的图标/徽标

收到推送通知时清除徽章

收到推送通知且应用程序在前台时如何防止弹出警报