Выбрать состояние с помощью RxJS в Angular 6 не работает

В веб-приложении я использую Angular и RxJS 6. Приложение имеет логин, ответ логина - это токен, поэтому после входа я сохраняю токен в sessionStorage, а затем декодирую токен, чтобы сохранить текущий. авторизованный пользователь. Это состояние после входа в систему:

введите описание изображения здесь

Я пытаюсь разработать такое поведение: если пользователь перейдет на страницу «..login» (например, в login.components.ts) и если он уже вошел в систему, приложение перенаправит на домашнюю страницу. Это мой код внутри ngOnInit () в login.component.ts:

  ngOnInit() {
   this.store.select('auth')
     .pipe(take(1),
       map((authState: fromAuth.State) => {
         console.log('test');
         if (authState.authenticated) {
           this.router.navigate(['/home']);
         }
      }));
}

Это интерфейс AppState:

export interface AppState {
  user: fromProfile.State,
  auth: fromAuth.State,
  core: fromCore.State
}

Тестируя это, я вхожу в систему, иду домой, затем перехожу на страницу входа, я помещаю точку останова в console.log (), но она не достигает точки останова, даже не входит в нее, и поэтому не не перенаправлять на домашнюю страницу. Почему?

* ОБНОВЛЕНО *: это экран отладки  введите описание изображения здесь


person panagulis72    schedule 04.07.2018    source источник
comment
Ваша проблема связана только с точкой останова?   -  person    schedule 04.07.2018
comment
Нет, проблема в том, что он не переходит на главную, даже если пользователь вошел в систему.   -  person panagulis72    schedule 04.07.2018
comment
Ну, ngOnInit() { .pipe(take(1), не совсем правильный код ... Это ваш настоящий код?   -  person    schedule 04.07.2018
comment
да! Я предполагаю, что это не совсем правильный код ..... видя, что он не работает: D как я могу это исправить?   -  person panagulis72    schedule 04.07.2018
comment
Ах нет, подождите, LOL, я забыл строчку   -  person panagulis72    schedule 04.07.2018
comment
Я отредактировал свой вопрос, добавил this.store.select ('auth') '   -  person panagulis72    schedule 04.07.2018
comment
Теперь это кажется более правильным: D Вы пытались удалить take(1)?   -  person    schedule 04.07.2018
comment
:) да, и это не работает, такое же поведение   -  person panagulis72    schedule 04.07.2018
comment
Хорошо, и ваш cde работает ngOnInit? Вы пробовали войти в систему перед вызовом store.select?   -  person    schedule 04.07.2018
comment
в методе ngOnInit () вводится правильно   -  person panagulis72    schedule 04.07.2018
comment
Хорошо, не могли бы вы опубликовать код store.select?   -  person    schedule 04.07.2018
comment
Конечно, вот экран отладки: ibb.co/iB4r9y   -  person panagulis72    schedule 04.07.2018
comment
Корпоративный прокси, изображения не отображаются. Разве вы не можете просто разместить здесь свой код как отредактировать?   -  person    schedule 04.07.2018
comment
Я отредактировал свой вопрос   -  person panagulis72    schedule 04.07.2018
comment
Я все еще не вижу изображений!   -  person    schedule 04.07.2018
comment
Ммм .. это странно! Что ж, я собираюсь описать: если отладка const test = this.store.select ('auth'); это объект типа Store со следующими свойствами: actionsObserver, operator, reducerManager, source, _isScalar: false   -  person panagulis72    schedule 04.07.2018
comment
Не странно, мое рабочее место блокирует imgur ... Я знаю, что store.select является Observable, но я хочу посмотреть, как вы его написали. Разве что из библиотеки?   -  person    schedule 04.07.2018


Ответы (1)


Функция select() возвращает Observable, поэтому вам нужно .subscribe(), чтобы pipe был вызван.

person GuiRoCo    schedule 04.07.2018