Подтвердить что ты не робот

UI-Router: последовательное разрешение родительского и дочернего состояний

У меня есть два абстрактных состояния parent и parent.child и активируемое состояние parent.child.grand.

Я хочу, чтобы parent был обещано разрешенным, прежде чем parent.child.grand выполнит свои разрешения. Зачем? Поскольку определенные данные, которые поступают из запроса ajax в разрешении от parent, требуются в parent.grand.child.

Здесь gist

Возможно ли последовательно связать promises родительского с дочерними состояниями без использования контроллеров?

(parent разрешить старт → завершить ajax-запрос → решить обещание → parent.child.grand разрешить старт → завершить ajax-запрос → разрешить обещание)

4b9b3361

Ответ 1

Я видел несколько ответов для этого, но это все еще было не совсем ясно без примера. Документы говорят:

Ключи разрешения ДОЛЖНЫ быть введены в дочерние состояния, если вы хотите подождите, пока promises будет разрешен до создания экземпляра детей.

Вот пример:

    $stateProvider.state('parent', {
          resolve:{
             resA:  function(){
                return {'value': 'A'};
             }
          },
          controller: 'parentCtrl'
       })
       .state('parent.child', {
          resolve:{
             // Adding resA as an argument here makes it so that this child state resB resolve
             // function is not run until the parent state resA resolve function is completed.
             resB: function(resA){
                return {'value': resA.value + 'B'};
             }
          }
          controller: 'childCtrl'
        })

И вам не нужно вводить resA в дочерний контроллер.

Ответ 2

Если вы добавите auth к инъекции зависимостей вашего внука, ui-router решит его до разрешения внука.

['authsrv', 'auth', function(authsrv, auth){}]

Надеюсь, что это имеет смысл.