Перенаправление после действия CREATE_SUCCES - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть компонент для создания новой записи ... При отправке формы я отправляю действие CREATE.

В OnInit этого компонента у меня есть подписка ActionsSubject, чтобы пойматьзавершение действия CREATE.После этого я перенаправляю к компоненту обзора.

Это отлично работает, когда я впервые вставляю запись, но при попытке добавить вторую запись, подписки на завершение действия объекта сразу же попадают сразу после моего возвращения.на компоненте создания, и я перенаправлен обратно к обзору.

redirectSub: Subscription;

constructor(
  private store: Store<fromRoot.State>,
  private router: Router,
  private actionsSubject: ActionsSubject
) { }


ngOnInit() {
  this.redirectSub = this.actionsSubject.asObservable().pipe(
    ofType(ContactsActionTypes.CREATE_SUCCESS)
  ).subscribe(
    (action: CreateSuccess) => this.router.navigate(['/contacts', action.payload.id])
  );
}

ngOnDestroy() {
  this.redirectSub.unsubscribe();
}

submitted(subspecialisatie: SubSpecialisatie) {
  this.store.dispatch(new Create(subspecialisatie));
}




@Effect()
create$: Observable<Action> = this.actions$.pipe(
ofType(SubSpecialisatiesActionTypes.CREATE),
map((action: Create) => action.payload),
switchMap((subspecialisatie) => this.subspecialisatieService.createSubSpecialisatie(subspecialisatie)),
map((createdSubSpecialisatie: SubSpecialisatie) => new CreateSuccess(createdSubSpecialisatie))
);

Я должен иметь возможность вернуться к компоненту создания без перенаправления сразу ...

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Я понял.Объект ActionsSubject хранит последнее действие.Даже при уничтожении подписки.

Я изменил ее на ScannedActionsSubject, и теперь все работает нормально.

0 голосов
/ 01 февраля 2019

Я думаю, что я понял, что вы делаете неправильно, вы слушаете действие и обрабатываете его в компоненте , что не хорошо.Вы должны прослушивать действия только на редукторах (если это синхронный обработчик + создает новое состояние) или эффекты (если это асинхронный обработчик или просто побочная активность),Так что вы можете прослушать CREATE_SUCCESS на Эффекты и , перенаправить туда .Например:

constructor(
   ...,
   private router: Router,
   ...
) { }

@Effect({ dispatch: false })
createSuccess$: Observable<Action> = this.actions$.pipe(
   ofType(SubSpecialisatiesActionTypes.CREATE_SUCCESS),
   tap((action) => this.router.navigate(['/contacts', action.payload.id]))
);

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...