2015-02-25 4 views
2

Я пытаюсь загрузить функцию JSON-службы получения в функцию разрешения основного состояния, чтобы я мог хранить данные в переменной области.Угловой ui-маршрутизатор не работает

Информация учетной записи JSON актуальна, поскольку все вспомогательные страницы в основном зависят от информации.

-

Приведенный ниже код частично работает. Функция разрешения учетной записи успешно вызвана, и даже $ http возвращает обещание (состояние === 0 хотя). Проблема заключается в том, когда функция account разрешает state.controller никогда не вызывается.

$stateProvider 
      .state('app',{ 
       url: '/', 
       views: { 
        'header': { 
         templateUrl: '../views/templates/partials/header.html', 
        }, 
        'content': { 
         templateUrl: '../views/templates/partials/content.html' 
        }, 
        'footer': { 
         templateUrl: '../views/templates/partials/footer.html', 
        } 
       }, 
       resolve: { 
        account: function($timeout, accountFactory){ 
         //Comment 
         return $http({method: 'GET', url: '/account.json'}); 
        } 
       }, 
       controller: ['$scope', 'account', function($scope, account){ 
        // You can be sure that promiseObj is ready to use! 
        $scope.data = account; 
        console.log('SCOPE!!!!!'); 
       }], 
      }) 
      .state('app.accessory', { 
       url: 'accessory', 
       views: { 
        '[email protected]': { 
         templateUrl: '../views/accessory/listing.html', 
         controller: 'accessoryListingCtrl', 
         controllerAs: 'vm' 
        } 
       } 

      }) 
    }]); 
+1

Это был мой опыт, что при использовании нескольких видов, каждый нуждается в свой собственный контроллер и контроллер государства не получает пробег. (Таким образом, вы должны увидеть ту же проблему, даже если вы полностью удалили 'resolve'). – JAAulde

+0

@JAAulde - разрешение не должно быть вложенным под каждым представлением. Просто испытал это сегодня утром. Любая разрешенная переменная, определенная на уровне «state», будет доступна для «просмотров». –

+0

@RichardClayton я вижу. Я, к сожалению, поддерживаю старые браузеры и застрял на AngularJS 1.2.x, поэтому я честно понятия не имею, что возможно. Какую версию вы использовали, чтобы попробовать? – JAAulde

ответ

1

Неправильная конфигурация вашего родительского состояния. При использовании нескольких именованных представлений Контроллер не относится к состоянию, а к представлению, поэтому вы должны переместить оператор контроллера в конкретное объявление объявления или все, если оно вам понадобится повсюду.

Смотрите здесь: https://github.com/angular-ui/ui-router/wiki/Multiple-Named-Views

$stateProvider 
    .state('report',{ 
    views: { 
     'filters': { 
     templateUrl: 'report-filters.html', 
     controller: function($scope){ ... controller stuff just for filters view ... } 
     }, 
     'tabledata': { 
     templateUrl: 'report-table.html', 
     controller: function($scope){ ... controller stuff just for tabledata view ... } 
     }, 
     'graph': { 
     templateUrl: 'report-graph.html', 
     controller: function($scope){ ... controller stuff just for graph view ... } 
     }, 
    } 
    }) 
+0

Где параметр разрешения здесь, так как это не работает для меня –

0

Я не знаю, почему контроллер не вызван. Но вы можете начать с того, что resolve всегда возвращает данные.

resolve: { 
    account: function($timeout, accountFactory){ 
     //Comment 
     return $http({method: 'GET', url: '/account.json'}) 
      .$promise.then(
       function(data) { return data; }, 
       function(error) { return error; }); 
    } 
} 
+0

Мне любопытно, следует ли нам избегать запроса $ http в решении? Разве это не должно случиться в службе? Я спрашиваю, потому что это то, что я пытаюсь решить. – Winnemucca

+0

Лучше всего отвлечь это на службе –

Смежные вопросы