の場合、私は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はsetFirstNameSuccess = true、 になる必要があります。購読すると値を取得し、そうであればページにリダイレクトします。 –
こんにちは@ShlomiLevi、私は新しい状態を導入するだろう。私はしませんか?一言で言えば、 – balteo
の場合は、変更を保存する必要があります。 :) 新しい状態にする必要はありません。変更されたフィールドをサポートするように状態を構築するだけです。 これは、ストアに状態が必要であり、アクションをディスパッチするときに、基本的にストアを変更するためです。店舗を変更した後、変更されたフィールドに登録すると、それであなたはあなたが望むものに反応します:) –