СМОТРЕТЬ РЕШЕНИЕ В НОМЕРЕ ЭТОГО ПОЧТА
Я пытаюсь выполнить асинхронный HTTP-запрос для загрузки некоторых данных до загрузки приложения, поэтому я использую решение в $routeProvider, которое является HTTP-запросом в моем MainController. По какой-то причине я продолжаю получать Ошибка: [$ injector: unpr] Неизвестный поставщик: appDataProvider < - appDatastrong > , где appData - это место, где я выполняю свой HTTP-запрос. Я использую AngularJS v 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'
});
});
Я попытался изменить имя на случай, если это ключевое слово с конфликтующей системой, но без везения. По какой-то причине appDatastrong > никогда не распознается
Метод №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'});
}]);
РЕШЕНИЕ:
Проблема была НЕ из-за использования ранее используемой версии AngularJS.
Вот исправления с использованием кода, который у меня выше.
-
В app.js вам нужно объявить контроллер как контроллер : "MainController" и НЕ как контроллер: MainController даже хотя у вас есть var MainController = app.controller('MainController', ....).
-
Вторая и самая большая вещь в том, что в моем index.html я объявил свой контроллер уже такой:
index.html
body ng-app = "HEY" controller = "MainController" /body
Это вызвало ошибку Неизвестного поставщика. По-видимому, angular не скажет вам, что вы уже заявили, что контроллер, который вы используете для разрешения, и что это приведет к странной ошибке, не имеют никакого отношения к решению.
Я надеюсь, что это поможет кому-то, у кого может быть такая же проблема.