AngularJS, решение и неизвестный поставщик
У меня два пути с решимостью. Выполняется следующим образом:
.when('/foos', {
templateUrl: 'views/foos.html',
controller: 'FoosCtrl',
resolve: {
foo_list: ['$q', '$route', '$timeout', '$location', 'Foos', function($q, $route, $timeout, $location, Foos) {
// postpone the execution
var deferred_foo = $q.defer()
Foos.getFoos({token:session_uid}, successCb)
function successCb(list) {
if(list['status'] === 200) {
deferred_foo.resolve(list)
}
else {
alert('Crashcrashcrash')
deferred_foo.reject("Something just wasn't right")
//$location.path('maintenance')
}
}
return deferred_foo.promise
}]
}
})
.when('/r/:type/:bar_id', {
templateUrl: 'views/bar.html',
controller: 'BarsCtrl',
resolve: {
bar: ['$q', '$route', '$timeout', '$location', 'Bars', function($q, $route, $timeout, $location, Bars) {
// postpone the execution
var deferred = $q.defer()
Bars.getBar({type: bar_type}, successCb)
function successCb(result) {
if(result['status'] === 200) {
deferred.resolve(result)
}
else {
alert('Crashcrashcrash')
deferred.reject("Something just wasn't right")
$location.path('foos')
}
return deferred.promise
}]
}
})
Тогда у меня есть два контроллера, которые работают так:
App.controller('FoosCtrl', ['$scope', '$location', 'Foos', 'foo_list', function($scope, $location, Foos, foo_list) {...}
App.controller('BarsCtrl', ['$scope', '$routeParams', '$location', 'Bars', 'bar', 'sharedService', function($scope, $routeParams, $location, Bars, bar, sharedService) {...}
Может кто-нибудь объяснить, почему работает Бар, но Foo дает мне Error: Unknown provider: foo_listProvider <- foo_list
? Я попытался заменить foo_list
на другое имя в случае, если camelCasing что-то сделал, но не помог.
Ответы
Ответ 1
Итак, этот вопрос был на удивление похож на мой собственный, который я только что выяснил с помощью людей на канале IRC Angular... вы, случайно, настраиваете свой контроллер, хотя ng-controller
? У меня было:
<div ng-controller="myCtrl">
... когда он должен быть удален:
<div>
... потому что я настраивал контроллер в решении на маршрутизаторе. Это то, что я делал, и это вызывало эту проблему. Вы можете увидеть больше здесь:
fooobar.com/questions/108498/...
Ответ 2
foo_list < - - файл js для этого загружается на вашу страницу html в теге script? это может случиться так, что когда вы забыли включить factory/service/controller и фактически забыли включить его в тег script на странице index/app html (или потребовать прокладки)
Хорошо, просто увидел ваш комментарий и расширил ответ здесь, потому что его проще сделать здесь.
Ваш код, где вы объявляете контроллер, должен читать как
App.controller('FoosCtrl',
['$scope', '$location', 'Foos', /* comment out foo_list here*/
function($scope, $location, Foos, foo_list /* this remains */) {
...
}
когда маршрут будет изменен, вы укажете в "решении", который будет разрешен ui-router. Но это место, где вы объявляете свой FoosCtrl, на самом деле у вас нет провайдера для его решения.
Дайте это попробовать, у меня был подобный случай, как на прошлой неделе.
Ответ 3
Как и в случае с головами, у меня была аналогичная проблема, вызванная добавлением переменных-разрешений в зависимость от контроллера, не настроив функцию ответа в $stateProvider.state()
.
Добавление функции разрешения устраняет недостающую зависимость
(Я до сих пор не совсем понимаю почему - я был бы рад, если бы кто-нибудь мог поделиться своими знаниями в комментариях)