Mantikore
@Mantikore

Angular 6 — как настроить взаимодействие между компонентами?

Изучаю Ангулар. Пишу приложение с авторизацией и возможностью создавать посты от своего имени. Есть общий компонент system - структура следующая:
<app-header></app-header>
<div class="left-menu">
       <app-login></app-login>
</div>
<div class=" main-section">
        <router-outlet></router-outlet>
</div>
<app-footer></app-footer>


В левом меню форма для логина, обработчик написан, авторизация работает. При корректной авторизации создает переменную в localStorage с названием isLoggedIn. В router-outlet отображаются прочие странички, например, такие как список постов. Необходимо, чтобы при успешном логине сразу же, без перезагрузки страницы, появлялась кнопка добавления поста, на страничке списка постов или например в app-header. Пока я только в ngOnInit делаю проверку на переменную isLoggedIn, ну и соответсвенно на лету это не работает, а только после перезагрузки. Как сделать правильно?
  • Вопрос задан
  • 331 просмотр
Решения вопроса 1
Xuxicheta
@Xuxicheta Куратор тега Angular
инженер
Самый простой способ - через сервис.
Создаете допустим AuthService, в нем ваша isLoggedIn в виде BehaviorSubject.
В корневом компоненте OnInit проверяете localStorage, и выставляете isLoggedIn, если нужно. Тож самое при логине.
А компоненты подписываются при инициализации или при помощи пайпа async.
И при изменении этого параметра компоненты перерисовываются, отрабатывают ваши ngIf
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы