Свойство класса не определено в эффектах ngrx

В настоящее время я пытаюсь использовать ngrx в новом проекте. Что я сделал, так это то, что я написал компонент входа в систему, где пользователь может вводить учетные данные. Затем я отправляю новое действие с данными для входа.

Пока это работает. Теперь попробовал поиграться с эффектами ngrx. Эффект сработал правильно, потому что, когда я пытаюсь получить доступ к свойству «email» моей пользовательской модели в функции карты, оно всегда возвращает undefined, но когда я отлаживаю, отображается правильное значение. Может быть, здесь поможет какой-нибудь код:

@Effect()
auth$: Observable<Action> = this.actions$.pipe(
    ofType<authActions.Authenticate>(authActions.AUTHENTICATE),
    map((creds: LoginViewModel) => {
        const appUser = new AppUserViewModel(creds.email, 'Test');
        return new authActions.AuthenticationSuccessfull(appUser);
    })
);

Как видите, я передаю учетные данные, такие как LoginViewModel, и пытаюсь получить доступ к свойству «email». Я всегда получаю undefined для этого значения свойства. здесь вы можете увидеть, какое значение имеет значение, когда я отлаживаю.

Указано значение свойства электронной почты

Как видите, свойство электронной почты установлено, когда я отлаживаю. У кого-нибудь есть подсказка или объяснение, почему я не могу получить доступ к значению этого свойства? У меня здесь недоразумение?

Потому что даже если я создаю console.log (credentials.email), он говорит undefined

класс пользователя:

export class AppUserViewModel {
  public email: string;
  public userName: string;

  constructor(email: string, userName: string) {
    this.email = email;
    this.userName = userName;
  }
}

И класс LoginViewModel

export class LoginViewModel {
   public email: string;
   public password: string;

   constructor(email: string, password: string) {
    this.email = email;
    this.password = password;
   }
}

Я отправляю свое действие так:

onSubmit() {
    this._store.dispatch(new authActions.Authenticate(this.loginModel));
    this.submitted = true;
  }

С уважением


person jhen    schedule 19.06.2018    source источник
comment
Вы можете показать нам AppUserViewModel   -  person Християн Христов    schedule 19.06.2018
comment
Конечно. Я добавил его в пост, чтобы было удобнее читать.   -  person jhen    schedule 19.06.2018
comment
Что будет на выходе, если вы зарегистрируете credentials? Я пытался воспроизвести то, что вы делаете, и мне это кажется нормальным: D   -  person Християн Христов    schedule 19.06.2018
comment
Результат всегда «не определен». Это моя проблема. Я не понимаю, почему он не определен, даже когда отладчик показывает правильные значения. Кажется, я что-то упускаю: D   -  person jhen    schedule 19.06.2018
comment
Можете ли вы добавить, где вы отправляете authActions.Authenticate действие   -  person Okan Aslankan    schedule 19.06.2018


Ответы (1)


Я исправил свою ошибку. Проблема заключалась в том, что я передал свой loginModel, который был привязан к моим значениям формы, когда я отправил информацию для входа в систему. Это привело к тому, что значения не были определены.

вместо того

this._store.dispatch(new authActions.Authenticate(this.loginModel));

я использую это сейчас, и я работаю:

this._store.dispatch(
      new authActions.Authenticate({
        email: this.loginModel.email,
        password: this.loginModel.password
      })
    );

Танки Окану Асланкану, я проверил свой код по твоей подсказке и обнаружил ошибку :)

person jhen    schedule 19.06.2018