Estoy tratando de "personalizar" el ejemplo de mongolab para que se ajuste a mi propia API REST. Ahora me encuentro con este error y no estoy seguro de lo que estoy haciendo 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)
Este es mi controlador:
function ProductListCtrl($scope, Product) {
$scope.products = Product.query();
}
y este es el módulo:
angular.module('productServices', ['ngResource']).
factory('Product', ['$resource', function($resource){
var Product = $resource('/api/products/:id', { }, {
update: { method: 'PUT' }
});
return Product;
}]);
Respuestas:
Su código se ve bien, de hecho funciona (aparte de las llamadas mismas) cuando se copia y pega en una muestra jsFiddle: http://jsfiddle.net/VGaWD/
Es difícil decir lo que está sucediendo sin ver un ejemplo más completo, pero espero que el jsFiddle anterior sea útil. Lo que sospecho es que no está inicializando su aplicación con el módulo 'productServices' . Daría el mismo error, podemos ver esto en otro jsFiddle: http://jsfiddle.net/a69nX/1/
Si planea trabajar con AngularJS y MongoLab , le sugiero que use un adaptador existente para $ resource y MongoLab : https://github.com/pkozlowski-opensource/angularjs-mongolab. Alivia mucho el dolor al trabajar con MongoLab, usted Puede verlo en acción aquí: http://jsfiddle.net/pkozlowski_opensource/DP4Rh/ ¡Descargo de responsabilidad! Estoy manteniendo este adaptador (escrito en base a ejemplos de AngularJS), así que obviamente estoy sesgado aquí.
fuente
<body ng-app="productServices">
y el otro tiene<body ng-app="">
.Fiddle Options
pestaña de la derechaObtuve ese error porque estaba pasando un parámetro incorrecto a la definición de fábrica. Yo tenía:
Funcionó cuando eliminé
$scope
y cambié la definición de fábrica a:En caso de que necesite inyectarse
$scope
, use:fuente
Acabo de tener un problema similar. El error decía lo mismo en la pregunta, trató de resolverlo con la respuesta de pkozlowski.opensource y Ben G, que son respuestas correctas y buenas.
Mi problema fue realmente diferente con el mismo error:
en mi código HTML tuve la inicialización como esta ...
Un poco más abajo intenté hacer algo como esto:
Me deshice de la primera ... luego funcionó ... obviamente no se puede inicializar ng-app dos o más veces. lo suficientemente justo.
Me olvidé por completo de la primera "aplicación ng" y me sentí totalmente frustrado. Tal vez esto ayude a alguien algún día ...
fuente
Asegúrese de que su principal
app.js
incluye los servicios de los que depende. Por ejemplo:fuente
productServices
debería ser un módulo, por lo que es irrelevante lo que está dentro de dicho módulo (servicios o no).La respuesta de pkozlowski es correcta, pero en caso de que esto le suceda a otra persona, tuve el mismo error después de crear el mismo módulo dos veces por error; la segunda definición estaba anulando al proveedor de la primera:
Creé el módulo haciendo
luego un poco más abajo en el mismo archivo:
La forma correcta de hacer esto es:
fuente
En mi caso, he definido un nuevo proveedor, por ejemplo,
xyz
Cuando tenía que configurar el proveedor anterior, debe inyectarlo con una
Provider
cadena agregada -> sexyz
conviertexyzProvider
.Ex:
Si inyecta el proveedor anterior sin la cadena 'Proveedor', obtendrá el error similar en OP.
fuente
Al final del archivo JS para cerrar la función de fábrica que tenía
});
en vez de
}());
fuente
})();
Esto me tomó demasiado tiempo para rastrear. Asegúrese de minisegurar su controlador dentro de su directiva.
Espero que ayude
fuente
Para agregar mi propia experiencia aquí, estaba tratando de inyectar un servicio en una de las funciones de configuración de mi módulo. Este párrafo de los documentos que finalmente encontré explica por qué eso no funciona:
Lo que significa que puede inyectar proveedores en las funciones module.config (...), pero no puede inyectar servicios, para eso debe esperar hasta module.run (...), o exponer un proveedor que puede inyectar en el módulo. config
fuente
Para mí, este error fue causado al ejecutar la versión minificada de mi aplicación angular. Los documentos angulares sugieren una forma de evitar esto. Aquí está la cita relevante que describe el problema, y puede encontrar la solución sugerida en los propios documentos aquí :
fuente
Dado que este es el mejor resultado para "proveedor desconocido angularjs" en Google en este momento, aquí hay otro problema. Al hacer pruebas unitarias con Jasmine, asegúrese de tener esta declaración en su
beforeEach()
función:De lo contrario, obtendrá el mismo error en sus pruebas.
fuente
¡Otro caso más en el que ocurrirá este error, si su servicio está definido en un archivo javascript separado, asegúrese de hacer referencia a él! Sí, lo sé, error de novato.
fuente
Olvidé inyectar el archivo que contenía mis servicios por completo. Recuerde hacer esto al inicializar su módulo de aplicación:
fuente
En mi caso, utilicé una función anónima como envoltorio para el módulo angular, así:
Después de cerrar el paréntesis, olvidé llamar a la función anónima abriendo y cerrando los paréntesis nuevamente como se indicó anteriormente.
fuente
Para mí, el problema era la carga lenta; Cargué mi controlador y servicio tarde, por lo que no estaban disponibles en la carga de la página (y la inicialización angular). Hice esto con una etiqueta ui-if, pero eso es irrelevante. La solución fue cargar el servicio con la carga de la página ya.
fuente
Aquí hay otro escenario posible donde puede ver este error:
Si usa Sublime Text 2 y el complemento angular, generará stubs como este
observe el vacío '' como el primer elemento de la matriz después de la cadena 'utilFactory'. Si no tiene ninguna dependencia, elimínela para que sea así:
fuente
Como esta pregunta es el mejor resultado de Google, agregaré otra cosa posible a la lista.
Si el módulo que está utilizando tiene una falla en el contenedor de inyección de dependencia, proporcionará este mismo resultado. Por ejemplo, los módulos de copiar y pegar de Internet pueden depender de underscore.js e intentar inyectar '_' en el contenedor de di. Si el subrayado no existe en los proveedores de dependencia de su proyecto, cuando su controlador intente hacer referencia a la fábrica de su módulo, obtendrá un 'proveedor desconocido' para su fábrica en el registro de la consola del navegador.
fuente
El problema para mí fue que había algunos archivos javascript nuevos que creé que hacían referencia al servicio, pero Chrome solo vio la versión anterior. Un CTRL + F5 lo arregló para mí.
fuente
Recibí un error de "proveedor desconocido" relacionado con simulacros angulares (ngMockE2E) al compilar mi proyecto con Grunt. El problema era que los simulacros angulares no se pueden minificar, así que tuve que eliminarlo de la lista de archivos minificados.
fuente
Después de manejar este error también, puedo admitir esta lista de respuestas con mi propio caso.
Al mismo tiempo, es simple y tonto (tal vez no sea tonto para principiantes como yo, pero sí para expertos), la referencia del script a angular.min.js debe ser la primera en su lista de scripts en la página html.
Esto funciona:
Esto no:
Aviso sobre el angular.min.js.
Espero que ayude a cualquiera !! :)
fuente
Mi problema fue con Yeoman, usando (en mayúscula):
Archivos realizados (sin capitalizar):
pero el archivo index.html incluido (en mayúscula):
Espero que esto ayude a alguien.
fuente
Otra posibilidad más.
Yo tenia
unknown Provider <- <- nameOfMyService
. El error fue causado por la siguiente sintaxis:Angular estaba buscando la
''
dependencia.fuente
Mi escenario puede ser un poco oscuro, pero puede causar el mismo error y alguien puede experimentarlo, así que:
Al usar el servicio $ controller para crear una instancia de un nuevo controlador (que esperaba '$ scope' como primer argumento inyectado) estaba pasando el alcance local del nuevo controlador al segundo parámetro de la función $ controller (). Esto llevó a Angular a intentar invocar un servicio $ scope que no existe ( aunque, por un tiempo, realmente pensé que de alguna manera había eliminado el servicio '$ scope' del caché de Angular ). La solución es envolver el ámbito local en un objeto local:
fuente
Ninguna de las respuestas anteriores funcionó para mí, tal vez lo estaba haciendo completamente mal, pero como principiante, eso es lo que hacemos.
Estaba inicializando el controlador en un
div
para tener una lista:Y luego usar
$routeProvider
para asignar una URL al mismo controlador. Tan pronto como quiténg-init
el controlador funcionó con la ruta.fuente
Tuve el mismo problema Lo arreglé usando en
$('body').attr("ng-app", 'MyApp')
lugar de<body ng-app="MyApp">
boostrap.Porque lo hice
para requisitos de arquitectura.
fuente
En mi aplicación Ruby on Rails, hice lo siguiente:
Esto se hizo en el entorno de "desarrollo", que había minimizado Angular.js y lo incluyó en el
/public/assets/application.js
archivo.Eliminar los
/public/assets/*
archivos me resolvió el problema.fuente
Me enfrenté a un problema similar hoy y los problemas eran realmente muy pequeños
Si observa el bloque anterior, en la primera línea observará que inyecté $ alcance por error, lo cual es incorrecto. Eliminé esa dependencia no deseada para resolver el problema.
fuente
Tuve este error después de crear una nueva fábrica y usarla dentro de un componente, pero no verifiqué las especificaciones de esos componentes.
fuente
Otro 'problema': recibí este error al inyectar $ timeout, y me tomó unos minutos darme cuenta de que tenía espacios en blanco en los valores de la matriz. Esto no funcionará:
Publicar solo en caso de que alguien más tenga un error tonto como este.
fuente
Mi caso era poco fiable escribiendo
la función tiene una 'c'!
fuente