2015-07-18 2 views
0

У меня есть поток мастер, который собирает informationAUI-маршрутизатор перейти в другое состояние OnEnter

states["wizard"] = { 
     abstract: true, 
     url: "^/wizard", 
     controller: "wizardController", 
     templateUrl: "wizard.html" 
    }; 

    states["wizard.input"] = { 
     url: "^/input", 
     views: { 
      "": { 
       controller: "wizardController", 
       templateUrl: "form.html" 
      } 
     } 
    } 
    states["wizard.completed"] = { 
     templateUrl: "completed.html" 
    }; 

И еще один поток B мастера, что это подобная структура, которая собирает informationB.

Что я хочу сделать, когда пользователь переходит к/wizard, он проверяет, заполнена ли информация B, если нет, сначала перейдите к заполнению информацииB, а затем вернитесь к/wizard, чтобы продолжить работу мастера.

Каков наилучший способ перенаправления при входе пользователя в/wizard и лучший способ вернуться в/wizard при завершении работы мастера?

Для возврата я мог бы передать некоторый параметр в URL-адресе и в контроле контроллера wizardB, чтобы проверить, нужно ли ему перейти к wizardA, но не мог понять, как сделать первую переадресацию.

Заранее спасибо.

+0

можно использовать 'resolve' (см документацию) и проверить с сервисом, чтобы увидеть, если все данные, необходимо будет там или не и если не вернуть $ state.go() – charlietfl

+0

Спасибо charlietfl! На самом деле у моего обоих контроллеров уже введена одна и та же служба данных, я мог бы просто использовать это! – Wei

+0

Правильно, но вы также можете перехватывать внутри разрешения, и контроллер вообще не срабатывает, если вы отклоняете решение в маршрутизации – charlietfl

ответ

0

Спасибо charlietfl за информацию, используйте разрешение для обработки перенаправления, хорошо выглядит! Вот как я в конечном итоге делает:

var redirect = (returnState: string) => { 
     return ['$q', '$timeout', '$state', 'dataModel', ($q, $timeout, $state, dataModel) => { 
       var deferred = $q.defer(); 
       $timeout(() => { 
        if (dataModel.informationB === "") { 
         $state.go('wizardB.input', { rs: returnState }); 
         deferred.reject(); 
        } else { 
         // everything is fine, proceed 
         deferred.resolve(); 
        } 
       }); 

       return deferred.promise; 
      } 
     ]; 
    } 

и в состоянии конфигурации:

resolve: { 
      redirect: redirect("wizardA.input") 
     } 
Смежные вопросы