Я работаю в реализации, аналогичной вашим требованиям.
Теперь, после входа в систему, я получаю все данные, которые не являются общими для изменения, например вспомогательные таблицы, и сохраняю их в localalstorage.Вам не нужно делать это, вы можете хранить их в памяти, я делаю это, потому что я также сохраняю токен, срок действия которого составляет 1 час.Если вы закрываете браузер и снова открываете его, я проверяю, существует ли токен и является ли он действительным, если это так, я пропускаю вход в систему.В этом случае я считываю все данные вспомогательных таблиц из localstorage.
Поэтому после входа в систему я вызываю метод службы InitCache.
InitCache() {
this.http.get<IEmpresa[]>(
this.url() + 'empresas',
{ headers: this.getAuthHeaders() }
).subscribe(
data => {
this.cache.Empresas = data;
this.SaveToLocalStorage("Empresas"); // This is only needed if you skip login
}
)
...other gets
}
Затем у меня есть метод в службе, который язвоните, когда мне нужны эти данные.
Empresas() {
return this.cache.Empresas;
}
Это работает хорошо, но мне это не нравится, потому что вам нужно выйти / войти, чтобы обновить данные, или, что еще хуже, нажмите кнопку, ajjjjj.
Новое в разработке решение: поскольку я использую ядро asp.net в качестве бэкэнда, я реализовал signalR.Я попытаюсь объяснить, что он делает.
Когда приложение angular запускается, оно подключается к хабу signalR и ожидает сообщений.В каждом контроллере конечной точки, когда я изменяю вспомогательную таблицу, я отправляю сообщение клиентам, информирующее, что «эта» таблица изменилась, обновите кэш.
Угловое приложение получает эти сообщения, делает getвызов, обновляет свой кэш и сохраняет в localalstorage.И ... самое главное, метод в сервисе теперь является BehaviourSubject, что означает, что при получении обновления оно отправляется всем подписчикам (я подписываюсь на эти данные в компонентах).
Надеюсь, мне удалось выразить словами эту идею.