Я проникаю использовать ngrx эффекты и у меня есть следующий вопрос: так как dispatch
возвращается void
Я не знаю, как предотвратить маршрутизатор навигации, если ошибка происходит от моего Эффект ngrx (например, от this.userAccountService.updateFirstName(...
).Предотвращение маршрутизатора навигации в случае выхода из строя эффекта/ошибка
Из моего класса компонента:
updateFirstName() {
this.formStatus.submitted = true;
if (this.formStatus.form.valid) {
//Dispatch from the store
this.store.dispatch(new UpdateFirstNameAction(this.formStatus.form.value.firstName));
//Undesired behavior: will navigate even in case of error/failure!
this.router.navigate(['/dashboard/useraccount']);
}
}
Из моего класса эффекта:
@Effect()
updateFirstName$: Observable<Action> = this.actions$
.ofType(currentUserAccount.ActionTypes.UPDATE_FIRST_NAME)
.map((action: UpdateFirstNameAction) => action.payload)
.switchMap(firstName =>
this.userAccountService
.updateFirstName(firstName)
.map(() => new UpdateFirstNameSuccessAction(firstName))
//I obviously can't navigate from here
);
Я не уверен, что это хорошая практика (или даже возможно) использовать маршрутизатор для навигации от эффекта.
Может кто-нибудь предложить чистое решение, чтобы предотвратить навигацию маршрутизатора в случае ошибки, возникающей из-за моего эффекта?
UpdateFirstNameSuccessAction должен установитьFirstNameSuccess = true, , а затем, подписавшись на него, получите значение, и если да, перейдите на страницу. –
Привет @ShlomiLevi, тогда я бы представил новое состояние. Не так ли? – balteo
в двух словах, вы должны отреагировать на сохранение изменений. :) Нет необходимости иметь новое состояние, просто создайте свое состояние для поддержки измененного поля. Это потому, что ваш магазин должен иметь состояние, а когда вы отправляете действие, вы в основном меняете магазин. поэтому после того, как вы меняете магазин, вы подписываетесь на поле, которое изменилось, и из-за этого вы реагируете с тем, что вам нужно :) –