在ngrx效果

时间:2018-06-19 06:44:15

标签: angular ngrx ngrx-effects

我目前正在尝试在新项目上使用ngrx。我做的是我写了一个登录组件,用户可以在其中输入凭据。然后我发送一个包含登录信息的新动作。

到目前为止这是有效的。现在我试着玩ngrx效果。效果是正确的,因为当我尝试在map函数中访问我的自定义模型的'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”属性。我总是因为该属性值而未定义。在这里你可以看到我调试时的值是什么。

Email property value is given

您可以看到我在调试时设置了email属性。有人有提示或解释为什么我无法访问该属性的价值?我在这里有误会吗?

因为即使我制作了一个console.log(credentials.email),也表示未定义

用户类:

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;
  }

亲切的问候

1 个答案:

答案 0 :(得分:0)

我更正了我的错误。问题是当我分派登录信息时,我通过了我的loginModel,它被绑定到表单值上。这导致值未定义。

代替

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

现在使用它,我可以工作了

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

向Okan Aslankan表示感谢,由于您的提示,我检查了我的代码并发现了错误:)