Как изменить переменную области при получении push-уведомления

У меня есть значок уведомления в моем веб-приложении, который показывает количество уведомлений. Внешний интерфейс приложения выполнен с использованием angularjs.

Счетчик для значка хранится в переменной $rootScope. Я хочу увеличить переменную (или вызвать веб-службу, которая возвращает счетчик), когда получено push-уведомление.

Файл serviceworker.js не имеет доступа к переменным области видимости в angularjs. Как изменить значение переменной count из файла serviceworker.

Я подумал о добавлении прослушивателя событий изменения к элементу localStorage.

При входе я создам элемент.

localStorage.setItem('notifCount', 0);

Когда я получаю push-уведомление, я увеличиваю notifCount на localStorage на serviceworker.js, и срабатывает событие изменения. Я мог бы добавить прослушиватель изменений localStorage в один из файлов контроллера и вызвать веб-службу или просто увеличить переменную $rootScope.

Но это произойдет, даже если кто-то вручную изменит localStorage в инструментах разработки.

Я хочу знать, могу ли я сделать это таким образом (если это правильно) или есть лучший метод. Я не чувствую, что это правильный путь.

Предполагая, что у вас есть связь между Angular (клиентом) и работником службы, вы должны обернуть обновление угловой переменной в $apply. Если у вас не работает коммуникация, взгляните на ряд ссылок для связи сервис-воркеров из Google (craig-russell.co.uk/2016/01/29/…).

kendavidson 17.06.2019 14:45

использование locationStorage для этого кажется странным. Вы можете, например. зарегистрируйте слушателя сервисного работника в app.run и измените там переменную $rootScope.

Petr Averyanov 17.06.2019 18:38

@PetrAveryanov, и вы не можете получить доступ к localStorage в сервисворкере

Dwigh 18.06.2019 12:02
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
3
250
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Данные передаются между воркерами и основным потоком через систему сообщений — обе стороны отправляют свои сообщения, используя метод постсообщение(), и отвечают на сообщения через обработчик событий onmessage (сообщение содержится в атрибуте данных события Message). копировать, а не делиться.

Для получения дополнительной информации см.

Другие вопросы по теме