У меня есть значок уведомления в моем веб-приложении, который показывает количество уведомлений. Внешний интерфейс приложения выполнен с использованием angularjs.
Счетчик для значка хранится в переменной $rootScope
. Я хочу увеличить переменную (или вызвать веб-службу, которая возвращает счетчик), когда получено push-уведомление.
Файл serviceworker.js не имеет доступа к переменным области видимости в angularjs. Как изменить значение переменной count из файла serviceworker.
Я подумал о добавлении прослушивателя событий изменения к элементу localStorage
.
При входе я создам элемент.
localStorage.setItem('notifCount', 0);
Когда я получаю push-уведомление, я увеличиваю notifCount
на localStorage
на serviceworker.js
, и срабатывает событие изменения. Я мог бы добавить прослушиватель изменений localStorage
в один из файлов контроллера и вызвать веб-службу или просто увеличить переменную $rootScope
.
Но это произойдет, даже если кто-то вручную изменит localStorage в инструментах разработки.
Я хочу знать, могу ли я сделать это таким образом (если это правильно) или есть лучший метод. Я не чувствую, что это правильный путь.
использование locationStorage для этого кажется странным. Вы можете, например. зарегистрируйте слушателя сервисного работника в app.run и измените там переменную $rootScope.
@PetrAveryanov, и вы не можете получить доступ к localStorage
в сервисворкере
Данные передаются между воркерами и основным потоком через систему сообщений — обе стороны отправляют свои сообщения, используя метод постсообщение(), и отвечают на сообщения через обработчик событий onmessage
(сообщение содержится в атрибуте данных события Message). копировать, а не делиться.
Для получения дополнительной информации см.
Предполагая, что у вас есть связь между Angular (клиентом) и работником службы, вы должны обернуть обновление угловой переменной в $apply. Если у вас не работает коммуникация, взгляните на ряд ссылок для связи сервис-воркеров из Google (craig-russell.co.uk/2016/01/29/…).