Пример кода Angular / NGXS - невозможно получить ссылку на вход параметра - PullRequest
0 голосов
/ 10 ноября 2018

Я пытаюсь реализовать логин, как упомянуто здесь.

https://ngxs.gitbook.io/ngxs/recipes/authentication

  @Action(Login)
  login({ patchState }: StateContext<AuthStateModel>, { payload: { username } }: Login) {
    return this.authService.login(payload).pipe(tap((result: { token: string }) => {
      patchState({ token, username });
    }))
  }

Но я не могу получить ссылку на «полезную нагрузку», как показано в примере, вместо этого я получаю следующую ошибку. Любая помощь приветствуется! Я также хотел знать, что будет означать «{payload: {username}}» во входных параметрах функции.

enter image description here

1 Ответ

0 голосов
/ 10 ноября 2018

Это ошибка в документации.

Смотрите здесь:

export class Login {
  static readonly type = '[Auth] Login';
  constructor(public payload: { username: string, password: string }) {}
}

и здесь:

login({ patchState }: StateContext<AuthStateModel>, { payload: { username } }: Login) {

Это ошибка деструктуры, которая должна быть:

@Action(Login)
login({ patchState }: StateContext<AuthStateModel>, { payload }: Login) {
  return this.authService.login(payload).pipe(tap((result: { token: string }) => {
    patchState({ token, username: payload.username });
  }))
}

Это разрушает логин payload и затем ссылку username через payload.username.

Учетные данные отправляются в восходящем направлении, а токен возвращается в нисходящем направлении. AuthStateModel исправляется через StateContext.

Git Blame authentication.md

Что такое разрушение?

{ payload: { username } } - это Разрушающее назначение . В контексте параметра функции это означает, что «в этом объекте меня интересуют эти свойства». Глядя на login(), это означает: «Меня интересует только username (что неверно, как указано выше).

Надеюсь, это поможет!

UPDATE:

Это исправление было объединено в # 653 .

Просто чтобы уточнить:

let a = { payload: { username: { first: 'rafael', last: 'cepeda' } } };
let { payload: { username } } = a;//unwraps payload.username
console.log(username);//works
console.log(payload);//error

Исправлено:

let a = { payload: { username: { first: 'rafael', last: 'cepeda' } } };
let { payload } = a;//unwraps payload
console.log(payload.username);//works
console.log(payload);//works
...