2014-02-12 3 views
4

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

Ожидаемое поведение для resolve объекта в routeProvider в xxx должен быть введен в контроллер:

var app = angular.module('X', []) 
.config(['$routeProvider', function ($routeProvider) { 
    $routeProvider.when('/',{ 
     controller:'XCtrl', 
     templateUrl: 'x.html', 
     resolve: { 
      xxx: function() { 
       return 'XXX from routing config.'; 
      } 
     } 
    }) 
}]) 
.controller('XCtrl', function($scope, xxx) { 
    console.log('xxx = '+xxx); 
}); 

Консоль должна получить xxx = XXX from routing config. запись.

Вместо этого экстракта код выше не с:

Error: [$injector:unpr] Unknown provider: xxxProvider <- xxx 
http://errors.angularjs.org/1.2.10/$injector/unpr?p0=xxxProvider%20%3C-%20xxx 
.. etc. 

XCtrl не объявлен в HTML с ng-controller директивы, но только определенные в конфигурации маршрутизации.

ответ

3

Если у вас есть несколько записей в конфигурации маршрутизации, используя тот же контроллер, все свойства, которые вводятся в контроллере должны появиться во всех экземплярах resolve объекта:

var app = angular.module('X', []) 
.config(['$routeProvider', function ($routeProvider) { 
    $routeProvider 
    .when('/',{ 
     controller:'XCtrl', 
     templateUrl: 'x.html', 
     resolve: { 
      xxx: function() { 
       return 'XXX from routing config.'; 
      } 
      another: // ... 
     } 
    }) 
    .when('/page2',{ 
     controller:'XCtrl', 
     templateUrl: 'x/p2.html', 
     resolve: { 
      xxx: function() { 
       return 'XXX from routing config.'; 
      } 
     } 
    }) 
}]) 
.controller('XCtrl', function($scope, xxx) { 
    console.log('xxx = '+xxx); 
}); 

В resolve объектах не имеют чтобы быть обещаниями, прямые данные, возвращаемые из функции, как указано выше, также работают. Обещания полезны для предотвращения маршрутизации, если один из них отклонен.

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