J'essaye 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;
}]);
Réponses:
Votre code a l'air bien, en fait il fonctionne (à part les appels eux-mêmes) lorsqu'il est copié et collé dans un exemple jsFiddle: http://jsfiddle.net/VGaWD/
Difficile de dire ce qui se passe sans voir un exemple plus complet mais j'espère que le jsFiddle ci-dessus sera utile. Ce que je soupçonne, c'est que vous n'initialisez pas votre application avec le module 'productServices' . Cela donnerait la même erreur, nous pouvons le voir dans un autre jsFiddle: http://jsfiddle.net/a69nX/1/
Si vous envisagez de travailler avec AngularJS et MongoLab, je vous suggère d'utiliser un adaptateur existant pour la ressource $ et MongoLab : https://github.com/pkozlowski-opensource/angularjs-mongolab Cela soulage une grande partie de la douleur en travaillant avec MongoLab, vous pouvez le voir en action ici: http://jsfiddle.net/pkozlowski_opensource/DP4Rh/ Disclaimer! Je maintiens cet adaptateur (écrit sur la base d'exemples AngularJS) donc je suis évidemment biaisé ici.
la source
<body ng-app="productServices">
et l'autre a<body ng-app="">
.Fiddle Options
onglet sur la droiteJ'ai eu cette erreur parce que je passais un paramètre incorrect à la définition d'usine. J'ai eu:
Cela a fonctionné lorsque j'ai supprimé le
$scope
et changé la définition d'usine en:Au cas où vous auriez besoin d'injecter
$scope
, utilisez:la source
J'ai juste eu un problème similaire. L'erreur a dit la même chose dans la question, a essayé de la résoudre avec la réponse de pkozlowski.opensource et Ben G, qui sont tous deux des réponses correctes et bonnes.
Mon problème était en effet différent avec la même erreur:
dans mon HTML-Code j'ai eu l'initialisation comme ça ...
Un peu plus bas, j'ai essayé de faire quelque chose comme ceci:
Je me suis débarrassé du premier ... puis ça a marché ... évidemment, vous ne pouvez pas initialiser ng-app deux fois ou plus. C'est suffisant.
J'ai totalement oublié le premier "ng-app" et j'ai été totalement frustré. Peut-être que ça va aider quelqu'un un jour ...
la source
Assurez-vous que votre principal
app.js
comprend les services dont il dépend. Par exemple:la source
productServices
devrait être un module, donc ce qui est à l'intérieur de ce module (services ou non) n'a pas d'importance.La réponse de pkozlowski est correcte, mais juste au cas où cela arriverait à quelqu'un d'autre, j'ai eu la même erreur après avoir créé le même module deux fois par erreur; la deuxième définition prévalait sur le fournisseur de la première:
J'ai créé le module en faisant
puis un peu plus bas dans le même fichier:
La bonne façon de procéder est:
la source
Dans mon cas, j'ai défini un nouveau fournisseur, disons,
xyz
Lorsque vous deviez configurer le fournisseur ci-dessus, vous devez l'injecter avec la
Provider
chaîne ajoutée ->xyz
devientxyzProvider
.Ex:
Si vous injectez le fournisseur ci-dessus sans la chaîne 'Provider', vous obtiendrez l'erreur similaire dans OP.
la source
À la fin du fichier JS pour fermer la fonction d'usine que j'avais
});
au lieu de
}());
la source
})();
Cela m'a pris beaucoup trop de temps à retrouver. Assurez-vous que vous minisafe votre contrôleur dans votre directive.
J'espère que cela pourra aider
la source
Pour ajouter ma propre expérience ici, j'essayais d'injecter un service dans l'une de mes fonctions de configuration de module. Ce paragraphe de la documentation que j'ai finalement trouvé explique pourquoi cela ne fonctionne pas:
Cela signifie que vous pouvez injecter des fournisseurs dans les fonctions module.config (...), mais vous ne pouvez pas injecter de services, pour cela, vous devez attendre jusqu'à module.run (...), ou exposer un fournisseur que vous pouvez injecter dans module. config
la source
Pour moi, cette erreur a été causée par l'exécution de la version minifiée de mon application angulaire. Les documents angulaires suggèrent un moyen de contourner ce problème. Voici la citation pertinente décrivant le problème, et vous pouvez trouver la solution suggérée dans les documents eux-mêmes ici :
la source
Puisqu'il s'agit du meilleur résultat pour "angularjs unknown provider" sur Google en ce moment, voici un autre piège. Lorsque vous effectuez des tests unitaires avec Jasmine, assurez-vous d'avoir cette instruction dans votre
beforeEach()
fonction:Sinon, vous obtiendrez la même erreur dans vos tests.
la source
Encore un autre cas où cette erreur se produira, si votre service est défini dans un fichier javascript séparé, assurez-vous de le référencer! Oui, je sais, erreur de recrue.
la source
J'oubliais d'injecter le fichier qui regroupait mes services. N'oubliez pas de le faire lors de l'initialisation de votre module d'application:
la source
Dans mon cas, j'ai utilisé une fonction anonyme comme wrapper pour le module angulaire, comme ceci:
Après avoir fermé les parenthèses, j'ai oublié d'appeler la fonction anonyme en ouvrant et fermant à nouveau les parenthèses comme ci-dessus.
la source
Pour moi, le problème était le chargement paresseux; J'ai chargé mon contrôleur et mon service en retard, ils n'étaient donc pas disponibles au chargement de la page (et à l'initialisation angulaire). Je l'ai fait avec une balise ui-if, mais ce n'est pas pertinent. La solution consistait à charger le service avec le chargement de la page déjà.
la source
Voici un autre scénario possible dans lequel vous pouvez voir cette erreur:
Si vous utilisez Sublime Text 2 et le plugin angular, il générera des stubs comme celui-ci
remarquez le vide '' comme premier élément du tableau après la chaîne 'utilFactory'. Si vous n'avez aucune dépendance, supprimez-la pour que ce soit comme ceci:
la source
Puisque cette question est le meilleur résultat de Google, j'ajouterai une autre chose possible à la liste.
Si le module que vous utilisez a un échec sur le wrapper d'injection de dépendances, il fournira ce même résultat. Par exemple, les modules copier-coller à partir d'Internet peuvent s'appuyer sur underscore.js et tenter d'injecter avec '_' dans le wrapper di. Si le trait de soulignement n'existe pas dans les fournisseurs de dépendances de votre projet, lorsque votre contrôleur tente de référencer l'usine de votre module, il obtiendra «fournisseur inconnu» pour votre usine dans le journal de la console du navigateur.
la source
Le problème pour moi était qu'il y avait de nouveaux fichiers javascript que j'ai créés qui faisaient référence au service, mais Chrome n'a vu que l'ancienne version. Un CTRL + F5 l'a corrigé pour moi.
la source
J'ai eu une erreur de "fournisseur inconnu" liée à angular-mocks (ngMockE2E) lors de la compilation de mon projet avec Grunt. Le problème était que les simulations angulaires ne pouvaient pas être minifiées, j'ai donc dû le supprimer de la liste des fichiers minifiés.
la source
Après avoir traité cette erreur également, je peux soutenir cette liste de réponses avec mon propre cas.
C'est à la fois simple et stupide (peut-être pas idiot pour les débutants comme moi, mais oui pour les experts), la référence de script à angular.min.js doit être la première de votre liste de scripts dans la page html.
Cela marche:
Ce n'est pas:
Remarquez à propos de angular.min.js.
J'espère que cela aide n'importe qui !! :)
la source
Mon problème était avec Yeoman, en utilisant (en majuscule):
Fichiers créés (non capitalisés):
mais le fichier index.html inclus (en majuscule):
J'espère que cela aide quelqu'un.
la source
Encore une autre possibilité.
J'avais
unknown Provider <- <- nameOfMyService
. L'erreur a été causée par la syntaxe suivante:Angular cherchait la
''
dépendance.la source
Mon scénario peut être un peu obscur mais il peut provoquer la même erreur et quelqu'un peut en faire l'expérience, donc:
Lors de l'utilisation du service $ controller pour instancier un nouveau contrôleur (qui attendait '$ scope' comme premier argument injecté), je passais la portée locale du nouveau contrôleur dans le deuxième paramètre de la fonction $ controller (). Cela a conduit Angular à essayer d'appeler un service $ scope qui n'existe pas ( bien que, pendant un moment, j'ai en fait pensé que j'aurais supprimé le service '$ scope' du cache d'Angular ). La solution consiste à envelopper la portée locale dans un objet local:
la source
Aucune des réponses ci-dessus n'a fonctionné pour moi, peut-être que je faisais complètement faux, mais en tant que débutant, c'est ce que nous faisons.
J'initialisais le contrôleur dans un
div
afin d'avoir une liste:Et puis en utilisant
$routeProvider
pour mapper une URL sur le même contrôleur. Dès que j'ai retiréng-init
le contrôleur, le contrôleur a travaillé avec l'itinéraire.la source
J'ai eu le même problème. J'ai corrigé cela en utilisant
$('body').attr("ng-app", 'MyApp')
au lieu de<body ng-app="MyApp">
boostrap.Parce que j'ai fait
pour les exigences d'architecture.
la source
Dans mon application Ruby on Rails, j'avais effectué les opérations suivantes:
Cela a été fait dans l'environnement de «développement», qui avait minifié Angular.js et l'a inclus dans le
/public/assets/application.js
fichier.La suppression des
/public/assets/*
fichiers a résolu le problème pour moi.la source
J'ai rencontré un problème similaire aujourd'hui et les problèmes étaient vraiment très petits
Si vous observez le bloc ci-dessus, dans la première ligne, vous observerez que j'ai injecté $ scope par erreur, ce qui est incorrect. J'ai supprimé cette dépendance indésirable pour résoudre le problème.
la source
J'ai eu cette erreur après avoir créé une nouvelle usine et l'ai utilisée dans un composant mais je n'ai pas vérifié les spécifications de ces composants
la source
Un autre «piège»: j'obtenais cette erreur en injectant $ timeout, et il m'a fallu quelques minutes pour réaliser que j'avais des espaces dans les valeurs du tableau. Cela ne fonctionnera pas:
Publier juste au cas où quelqu'un d'autre aurait une erreur idiote comme celle-ci.
la source
Mon cas était douteux en tapant
la fonction a un «c»!
la source