#javascript #angular #store
#javascript #angular #Магазин
Вопрос:
У меня есть панель навигации, которая выводит имя и фамилию пользователя. Обе эти переменные берутся из локального хранилища при инициализации компонента. У меня есть модальный, в модальном я могу изменить имя и фамилию зарегистрированного пользователя и снова поместить их в локальное хранилище. Если я их успешно изменю, я хочу обновить панель навигации новым именем и фамилией.
Модальный интерфейс и панель навигации — это два разных компонента.
Как я могу этого добиться?
Решение 1: Я думал вручную изменить переменные, пока публикация новых данных (имя и фамилия) была успешно выполнена. Могу ли я изменить переменные другого компонента (навигационной панели) из модального?
Решение 2: вызовите местоположение.перезагрузите, чтобы принудительно автоматически обновить все представления новыми данными в локальном хранилище.
Решение 3: использование хранилища
Спасибо
Комментарии:
1. Похоже, вы уже ответили на свой вопрос тремя возможными решениями? В чем проблема?
2. Я пытаюсь иметь как можно больше решений, чтобы выбрать то, которое лучше для меня. Я не удовлетворен своим
Ответ №1:
Создайте службу-оболочку для получения / настройки локального хранилища, которая также будет генерироваться при настройке. Модальные вызовы, скажем, this.storageService.setItem('foo', 'bar')
, в то время как панель навигации подписана this.storageService.changes$
.
Хотя при записи чего-либо в хранилище генерируется событие, оно генерируется только в других окнах для того же домена.
Комментарии:
1. Не могли бы вы, пожалуйста, привести небольшой пример для этого решения, похоже, того, которое я ищу. Я новичок в angular 2. Спасибо
2. Это в значительной степени так. Вы создаете сервис (для общей сути, официальное руководство по Angular вполне адекватно), который имеет два метода:
getItem
иsetItem
и свойствоchange$: Subject<{key, value}>
.getItem
вызывает только localStorage.GetItem,setItem
вызывает localStorage.setItem и передает изменение вchange$
поток. Вы внедряете свой сервис в панель навигации и модальный (и везде в приложении, где вы используете локальное хранилище). Navbar подписываетсяchange$
и при необходимости обновляет свое отображение.