我正在使用@ngrx/store 和@ngrx/effects 制作一个Angular 2 应用程序。
我正在努力理解将逻辑放在动作/效果等之外的位置以及调用服务功能的位置。
例如,通过身份验证...
- 当用户单击登录
AUTH_REQUEST
时,这将使用登录凭据作为有效负载分派一个操作。 - 效果会查找此操作并调用 API。
- 成功的结果调用
AUTH_SUCCESS
响应对象中带有令牌、用户名等的操作作为有效负载,该有效负载将发送到 reducer 以更新AuthState
.
例如:在AuthEffects
@Effect() authenticate$ = this.updates$
.whenAction(AuthActions.AUTHENTICATE_REQUEST)
.switchMap(update => this.api.post('/authenticate', update.action.payload)
.map((res:any) => ({type: AuthActions.AUTHENTICATE_SUCCESS, payload: res.json()}))
.catch((err:any) => Observable.of({ type: AuthActions.AUTHENTICATE_ERROR, payload: err }))
);
在AuthReducer
case AuthActions.AUTHENTICATE_SUCCESS:
return Object.assign({}, state, <AuthState>{
processing: false,
failed: false,
isLoggedIn: true,
token: action.payload.token,
username: action.payload.username,
accountId: action.payload.accountId,
});
我想知道的是:
- 处理完操作后在哪里调用路由器以更改页面
AUTH_SUCCESS
。我是从效果反应链中执行此操作还是......?? - 我有一个
AuthService
需要将凭据(令牌等)存储在 LocalStorage 中。我应该在哪里调用它来“存储令牌”,即authService.store(userCredentials)
.
任何帮助表示赞赏。