Ngxs - Как использовать selectSnapshot? - PullRequest
0 голосов
/ 26 мая 2018

У меня есть охранник, который проверяет, есть ли токен состояния.

canActivate(): boolean {
const token = this.store.selectSnapshot((state: AuthenticationState) => state.token);
  if (!token) {
    return true;
  }

  this.router.navigate(['home']);
  return false;
}

Тогда у меня что-то вроде этого:

export class AuthenticationState {
  @Selector()
  static token(state: AuthenticationStateModel) {
    return state.token;
  }
}

Я получаю ошибку.Свойство 'token' не существует для типа 'AuthenticationState'

1 Ответ

0 голосов
/ 26 мая 2018

Ошибка, которую вы делаете здесь, заключается в том, что вы предполагаете, что параметром состояния лямбды будет ваш AuthenticationState, который фактически будет всем состоянием приложения, которое является родительским для AuthenticationState.Вы должны передать свой селектор следующим образом:

canActivate(): boolean {
const token = this.store.selectSnapshot(AuthenticationState.token);
  if (!token) {
    return true;
  }

  this.router.navigate(['home']);
  return false;
}

На самом деле несколько дней назад было автором сообщения NGXS на эту тему: https://medium.com/@amcdnl/authentication-in-ngxs-6f25c52fd385

...