Я пытаюсь выполнить асинхронный http-запрос для загрузки некоторых данных до загрузки моего приложения, поэтому я использую разрешение в $routeProvider, которое является http-запросом в моем MainController. По какой-то причине я продолжаю получать сообщение Ошибка: [$injector:unpr] Неизвестный поставщик: appDataProvider ‹- appData, где appData — это то место, где я делаю свой HTTP-запрос. Я использую AngularJS версии 1.2.5.
Вот код и два метода, которые я пробовал, оба дают одну и ту же ошибку:
Способ 1
MainController.js
var MainController = ['$scope','$location','appData',
function($scope, $location, appData){
console.log(appData.data);
}
];
MainController.loadData = {
appData: function($http, $location, MainFactory){
var aid = MainFactory.extractAid($location);
return $http({method: 'GET', url: URL_CONST + aid});
}
};
app.js
var app = angular.module('HAY', ['ngRoute']);
app.config(function($routeProvider) {
$routeProvider
.when('/', {
redirectTo: '/pages/alerts'
})
.when('/pages/:pageName', {
templateUrl: function(params) {
return 'views/pages/' + params.pageName + '.html';
},
controller: MainController,
resolve: MainController.loadData
})
.otherwise({
redirectTo: '/pages/alerts'
});
});
Я попытался изменить имя на случай, если это конфликтующее ключевое слово, зарезервированное системой, но безуспешно. По какой-то причине appData никогда не распознается
Способ № 2. Я также пытался изменить его следующим образом:
app.js
var app = angular.module('HEY', ['ngRoute']);
app.config(function($routeProvider) {
$routeProvider
.when('/', {
redirectTo: '/pages/alerts'
})
.when('/pages/:pageName', {
templateUrl: function(params) {
return 'views/pages/' + params.pageName + '.html';
},
controller: MainController,
resolve: {
appData: ['$http', '$location','MainFactory', function($http, $location, MainFactory) {
var aid = MainFactory.extractAid($location);
return $http({method: 'GET', url: URL_CONST + aid});
}]
}
})
.otherwise({
redirectTo: '/pages/alerts'
});
});
MainController.js
var MainController = ['$scope','$location','appData',
function($scope, $location, appData){
console.log(resolvedData);
}
];
Однако результат был точно таким же. Это как-то связано с angular 1.2.5?
Вот рабочая версия от другого человека
http://mhevery.github.io/angular-phonecat/app/#/phones
А вот код:
function PhoneListCtrl($scope, phones) {
$scope.phones = phones;
$scope.orderProp = 'age';
}
PhoneListCtrl.resolve = {
phones: function(Phone) {
return Phone.query();
},
delay: function($q, $defer) {
var delay = $q.defer();
$defer(delay.resolve, 1000);
return delay.promise;
}
}
angular.module('phonecat', ['phonecatFilters', 'phonecatServices', 'phonecatDirectives']).
config(['$routeProvider', function($routeProvider) {
$routeProvider.
when('/phones', {templateUrl: 'partials/phone-list.html', controller: PhoneListCtrl, resolve: PhoneListCtrl.resolve}).
otherwise({redirectTo: '/phones'});
}]);
appData
не является модулем. Вам не нужно вводить его. - person zs2020   schedule 18.12.2013MainFactory
, но не функцию. - person zs2020   schedule 18.12.2013$http
возвращает то, что вы ожидали? Попробуйте использовать инструменты разработчика Chrome и посмотрите на вкладку «Сеть» и посмотрите, что возвращает этот вызов. Может быть, что-то там идет не так и искажает ожидаемое значение промиса. - person m.e.conroy   schedule 18.12.2013ng-include
. Точно так же, как вы упомянули выше, обращение к контроллеру вызывает ошибку Неизвестный поставщик, по-видимому, также для частичных/включенных. Решение состояло в том, чтобы дать включению собственный контроллер, тогда все работает. - person davidkonrad   schedule 21.02.2018