153 votes

angular js unknown provider

J'essaie de "personnaliser" l'exemple mongolab pour l'adapter à ma propre API REST. Maintenant je rencontre cette erreur et je ne suis pas sûr de ce que je fais mal:

 Error: Unknown provider: ProductProvider <- Product
    at Error (unknown source)
    at http://localhost:3000/js/vendor/angular.min.js:28:395
    at Object.c [as get] (http://localhost:3000/js/vendor/angular.min.js:26:180)
    at http://localhost:3000/js/vendor/angular.min.js:28:476
    at c (http://localhost:3000/js/vendor/angular.min.js:26:180)
    at d (http://localhost:3000/js/vendor/angular.min.js:26:314)
 

Ceci est mon contrôleur:

 function ProductListCtrl($scope, Product) {
  $scope.products = Product.query();
}
 

et voici le module:

 angular.module('productServices', ['ngResource']).
    factory('Product', ['$resource', function($resource){
      var Product = $resource('/api/products/:id', {  }, {
        update: { method: 'PUT' }
      });

      return Product;
    }]);
 

quelqu'un peut-il me donner une idée de ce qui me manque?

Merci beaucoup

130voto

pkozlowski.opensource Points 52557

Ton code semble bon, en fait il fonctionne (à part les appels eux-mêmes) lorsqu'il est copié et collé dans un échantillon jsFiddle: http://jsfiddle.net/VGaWD/

Difficile de dire ce qui se passe sans voir un exemple plus complet, mais j'espère que le ci-dessus jsFiddle sera utile. Ce que je suis soupçonner, c'est que vous n'êtes pas de l'initialisation de votre application avec le 'productServices module. Il donnerait la même erreur, nous pouvons voir cela dans un autre jsFiddle: http://jsfiddle.net/a69nX/1/

Si vous prévoyez de travailler avec AngularJS et MongoLab , je voudrais suggérer à l'aide d'une carte existante pour $ressource et MongoLab: https://github.com/pkozlowski-opensource/angularjs-mongolab Il soulage beaucoup de la douleur de travail avec MongoLab, vous pouvez le voir en action ici: http://jsfiddle.net/pkozlowski_opensource/DP4Rh/ Avertissement! Je suis le maintien de cette carte (écrit basé sur AngularJS exemples) donc, je suis évidemment biaisé ici.

40voto

bresleveloper Points 792

pour moi, j'ai eu cette erreur pour avoir passé un mauvais param à l'usine, j'avais:

 myModule.factory('myService', function($scope, $http)...
 

quand j'ai enlevé la portée $ et l'a changé pour

 myModule.factory('myService', function( $http)...
 

ça a marché. au cas où vous avez vraiment besoin de la portée alors vous devez utiliser

 myModule.factory('myService', function($rootScope, $http)...
 

32voto

Preexo Points 533

J'ai juste eu un problème similaire. L'erreur dit de même dans la question, a essayé de le résoudre avec la réponse de pkozlowski.opensource et Ben G, les deux sont corrects et les bonnes réponses.

Mon problème a été en effet différents avec le même message d'erreur:

dans mon Code HTML, j'ai eu l'initialisation comme ça...

<html ng-app>

Un peu plus bas, j'ai essayé de faire quelque chose comme ceci:

<div id="cartView" ng-app="myApp" ng-controller="CartCtrl">

Je me suis débarrassé de la première... puis il a travaillé... de toute évidence, vous ne pouvez pas initialiser ng-app deux fois ou plusieurs fois. juste assez.

J'ai totalement oublié le premier "ng-app" et suis totalement frustré. Peut-être que ça va aider quelqu'un un jour...

27voto

BeginnerAngularJs Points 111

Assurez-vous que votre application principale js dépend du service: par exemple:

 /* App Module */
angular.module('myApp', ['productServices']). 
.....
 

17voto

Ben G Points 2106

pkozlowski'answer est correct, mais juste au cas où cela arriverait à quelqu'un: j'ai eu la même erreur après avoir créé le même module deux fois par erreur, la deuxième définition remplaçant le fournisseur du premier:

Une fois en faisant

 angular.module('MyService'...
).factory(...);
 

puis un peu dans le même fichier

 angular.module('MyService'...
).value('version','0.1');
 

la bonne façon de le faire:

 angular.module('MyService'...
).factory(...).value('version','0.1');
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X