Перенаправить на страницу после отправки действия (ngredux) - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть проект с угловой 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 (это правильный путь) и при отправке сделать перенаправление (в случае успеха)? Или от редуктора? Или только из компонента?

...