Перенаправить на страницу после отправки действия (ngredux)
У меня есть проект с угловым 6 + ngredux, и я хочу совет для следующей ситуации:
- У меня есть страница с подробным обзором (информация только для чтения), заполненная данными из состояния приложения. На этой странице у меня есть несколько кнопок, которые открывают другие страницы (здесь у нас есть несколько форм - в этих формах пользователь может редактировать некоторые поля).
Когда пользователь сохранит данные, он должен вернуться на страницу сведений об обзоре. Поскольку мы используем ngredux, и мы обновляем значения из состояния приложения, мы обрабатываем это в компоненте, используя такой компонент, как:
onSubmit(){ this.actionsCreator.save(this.model); const route = 'details/' + this.objId; this.router.navigate([route]); }
Проблема, с которой мы столкнулись, заключается в том, что если метод "save" занимает 2-3 секунды в API, пользователь перенаправляется первым, а после этого модель сохраняется и обновляется в состоянии приложения (это нормально - мы делаем перенаправить неправильно).
Для отправки действий мы используем пользовательское промежуточное ПО.
return next => action => {
const {type, callApi, shouldCallApi, success = function () { }} = action;
if (!shouldCallApi) { return next(action);}
if (typeof callApi !== 'function') {throw new Error('Expected callApi to be a function');}
if (typeof shouldCallApi !== 'function') {throw new Error('Expected shouldCallApi to be a function');}
if (!shouldCallApi(getState())) {return;}
return callApi().subscribe(response => {
success(response);
return dispatch({type: type,payload: response || null});
});
};
Поэтому я хочу получить рекомендацию о том, как справляться с такими ситуациями. Должны ли мы внедрить роутер в службу actionsCreator (это правильный путь) и при отправке сделать перенаправление (в случае успеха)? Или от редуктора? Или только из компонента?