AngularJS, fournisseur de résolution et inconnu

J’ai deux routes résolues. Va comme ça:

.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 }] } }) 

Ensuite, deux contrôleurs fonctionnent comme ceci:

  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) {...} 

Quelqu’un pourrait-il expliquer pourquoi Bar fonctionne mais Foo me donne Error: Unknown provider: foo_listProvider <- foo_list ? J’ai essayé de remplacer foo_list avec un nom différent dans le cas où camelCasing a fait quelque chose mais n’a pas aidé.

Donc, cette question était étonnamment similaire à la mienne, que je viens de découvrir avec l’aide des gens du canal Angular IRC … êtes-vous, par hasard, en train de configurer votre contrôleur avec ng-controller ? J’avais:

  

… quand il aurait dû être retiré:

  

… parce que je configurais le contrôleur dans la résolution du routeur. C’est ce que je faisais et cela causait ce problème. Vous pouvez voir plus ici:

https://stackoverflow.com/a/18305423/1306982

foo_list <- est-ce que le fichier js est chargé dans votre page HTML dans une balise script? il se peut que lorsque vous avez oublié d'inclure la fabrique / le service / le contrôleur et que vous ayez oublié de l'inclure dans une balise script dans la page index / app html (ou que vous ayez besoin de shims)

Okay juste vu votre commentaire et étendant la réponse ici parce que c’est plus facile de le faire ici.

Votre code où vous déclarez le contrôleur devrait se lire comme

 App.controller('FoosCtrl', ['$scope', '$location', 'Foos', /* comment out foo_list here*/ function($scope, $location, Foos, foo_list /* this remains */) { ... } 

Lorsque la route est modifiée, les choses que vous mentionnez dans le paragraphe “Résoudre” seront résolues par l’interface utilisateur. Mais c’est l’endroit où vous déclarez votre FoosCtrl que vous n’avez pas réellement un fournisseur pour résoudre.

Essayez ceci j’ai eu un cas similaire comme celui-ci la semaine dernière.

Juste comme un heads-up, j’ai juste eu un problème similaire qui a été provoqué en ajoutant les variables de résolution en tant que dépendance au contrôleur tout en n’ayant pas encore configuré la fonction de réponse dans le $stateProvider.state() .

L’ajout de la fonction de résolution a corrigé la dépendance manquante
(Je n’arrive toujours pas à comprendre pourquoi – je serais heureux si quelqu’un pouvait partager ses connaissances dans les commentaires)