Как создать локальный эффект в ngrx / effects

Как я могу сделать что-то подобное в 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, а затем перенаправить на страницу панели мониторинга? Я не хочу перенаправлять на страницу панели инструментов, если я отправляю действия userOptions.Add и userInfo.Add вне последовательности user.SIGN_UP_SUCCESS, например, с других страниц.

ОТВЕТ

Виктор Савкин. Паттерны государственного управления и передовые методы работы с NgRx https://www.youtube.com/watch?v=vX2vG0o-rpM


person E. Efimov    schedule 15.06.2017    source источник


Ответы (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' });
      ];
   })
person pixelbits    schedule 15.06.2017

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'

хорошего дня :-)

person YairTawil    schedule 15.06.2017
comment
Вы можете сделать это: `map (({payload}: user.SignUpSuccessAction) =› // Использовать полезную нагрузку) `вместо map(toPayload) - person YairTawil; 16.10.2017