0

我怎样才能在ngrx/effects中做这样的事情:

// I want to handle a sign up effect
return this.actions$.ofType(user.SIGN_UP_SUCCESS)
   .map((action: user.SignUpSuccessAction) => action.payload)
   .mergeMap(() => {
      // then I have to call two other async actions to add new records
      return [
         new userOptions.Add(new UserOptionsModel());
         new userInfo.Add(new UserInfoModel());
      ];
   })

如何处理 userOptions 和 userInfo 操作的成功操作,然后重定向到仪表板页面?如果我在 user.SIGN_UP_SUCCESS 序列之外调度 userOptions.Add 和 userInfo.Add 操作,例如从其他页面,我不想重定向到仪表板页面。

回答

维克多·萨夫金。NgRx 的状态管理模式和最佳实践 https://www.youtube.com/watch?v=vX2vG0o-rpM

4

2 回答 2

2

您可以使用@ngrx/router-store

return this.actions$.ofType(user.SIGN_UP_SUCCESS)
   .mergeMap(() => {
      // then I have to call two other async actions to add new records
      return [
         new userOptions.Add(new UserOptionsModel()),
         new userInfo.Add(new UserInfoModel()),
         go(['/path', { routeParam: 1 }], { query: 'string' });
      ];
   })
于 2017-06-15T14:16:04.613 回答
0

2个选项:

第一的:

return this.actions$.ofType(user.SIGN_UP_SUCCESS)
   .mergeMap(() => {
      // then I have to call two other async actions to add new records
      return [
         new userOptions.Add(new UserOptionsModel());
         new userInfo.Add(new UserInfoModel());
      ];
   })
   .map((action) => {
      if(action instanceof UserInfoModel){
        /// latest
      }
   })

第二:

您可以使用map两次而不是mergeMap.

return this.actions$.ofType(user.SIGN_UP_SUCCESS)
       .map(toPayload)
       .map(() => {
          return new userOptions.Add(new UserOptionsModel());                 
       })
       .map(() => {
             return new userInfo.Add(new UserInfoModel());
       })
       .map(() => {
             //the end
       })

****map(toPayload)这样做:map((action: user.SignUpSuccessAction) => action.payload)

import { toPayload } from '@ngrx/effects'

祝你今天过得愉快 :-)

于 2017-06-15T11:18:39.457 回答