У меня есть проект с угловой 6 + ngredux, и я хочу получить совет для следующей ситуации:
- У меня есть страница с подробным обзором (информация только для чтения), заполненная данными о состоянии приложения. На этой странице у меня есть несколько кнопок, которые открывают другие страницы (здесь у нас есть несколько форм - в этих формах пользователь может редактировать некоторые поля).
Когда пользователь сохраняет данные, он должен вернуться на страницу сведений об обзоре.
Поскольку мы используем ngredux, и мы обновляем значения из состояния приложения, мы обрабатываем это в компоненте, используя такой компонент, как:
onSubmit(){
this.actionsCreator.save(this.model);
const route = 'details/' + this.objId;
this.router.navigate([route]);
}
Проблема, с которой мы столкнулись, заключается в том, что если метод «save» занимает в API 2-3 секунды, пользователь сначала перенаправляется, а после этого модель сохраняется и обновляется в состоянии приложения (это нормально - мы делаем перенаправление неправильно).
Для отправки действий мы используем пользовательское промежуточное ПО.
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 (это правильный путь) и при отправке сделать перенаправление (в случае успеха)? Или от редуктора? Или только из компонента?