Estou tentando "personalizar" o exemplo do mongolab para caber na minha própria API REST. Agora estou com esse erro e não tenho certeza do que estou fazendo de errado:
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 é o meu controlador:
function ProductListCtrl($scope, Product) {
$scope.products = Product.query();
}
e este é o módulo:
angular.module('productServices', ['ngResource']).
factory('Product', ['$resource', function($resource){
var Product = $resource('/api/products/:id', { }, {
update: { method: 'PUT' }
});
return Product;
}]);
Respostas:
Seu código parece bom, na verdade, funciona (além das chamadas em si) quando copiado e colado em uma amostra jsFiddle: http://jsfiddle.net/VGaWD/
Difícil dizer o que está acontecendo sem ver um exemplo mais completo, mas espero que o jsFiddle acima seja útil. O que eu suspeito é que você não está inicializando seu aplicativo com o módulo 'productServices' . Daria o mesmo erro, podemos ver isso em outro jsFiddle: http://jsfiddle.net/a69nX/1/
Se você está planejando para trabalhar com AngularJS e MongoLab , sugiro usar um adaptador existente para o $ de recursos e MongoLab : https://github.com/pkozlowski-opensource/angularjs-mongolab Facilita muito da dor trabalhando com MongoLab, você pode vê-lo em ação aqui: http://jsfiddle.net/pkozlowski_opensource/DP4Rh/ Isenção de responsabilidade! Estou mantendo esse adaptador (escrito com base nos exemplos do AngularJS), portanto, obviamente estou inclinado aqui.
fonte
<body ng-app="productServices">
eo outro tem<body ng-app="">
.Fiddle Options
aba à direitaEu recebi esse erro porque estava passando um parâmetro incorreto para a definição de fábrica. Eu tinha:
Funcionou quando removi
$scope
e alterei a definição de fábrica para:Caso você precise injetar
$scope
, use:fonte
Eu apenas tive um problema semelhante. O erro disse o mesmo que na pergunta, tentou resolvê-lo com a resposta de pkozlowski.opensource e Ben G, que são as respostas corretas e boas.
Meu problema foi realmente diferente com o mesmo erro:
no meu código HTML, tive a inicialização assim ...
Um pouco mais abaixo, tentei fazer algo assim:
Eu me livrei do primeiro ... então funcionou ... obviamente você não pode inicializar o ng-app duas ou mais vezes. justo.
Eu esqueci completamente o primeiro "aplicativo ng" e fiquei totalmente frustrado. Talvez isso ajude alguém um dia ...
fonte
Verifique se o seu principal
app.js
inclui os serviços dos quais depende. Por exemplo:fonte
productServices
deve ser um módulo, por isso é irrelevante o que está dentro desse módulo (serviços ou não).A resposta de pkozlowski está correta, mas, caso isso aconteça com outra pessoa, eu tive o mesmo erro depois de criar o mesmo módulo duas vezes por engano; a segunda definição estava substituindo o provedor da primeira:
Eu criei o módulo fazendo
um pouco mais abaixo no mesmo arquivo:
A maneira correta de fazer isso é:
fonte
No meu caso, defini um novo provedor, digamos,
xyz
Quando você configurou o provedor acima, você deve injetá-lo com a
Provider
string anexada ->xyz
torna-sexyzProvider
.Ex:
Se você injetar o provedor acima sem a string 'Provider', receberá um erro semelhante no OP.
fonte
No final do arquivo JS para fechar a função de fábrica que eu tinha
});
ao invés de
}());
fonte
})();
Isso me levou muito tempo para rastrear. Certifique-se de minisafe seu controlador dentro da sua diretiva.
espero que ajude
fonte
Para adicionar minha própria experiência aqui, eu estava tentando injetar um serviço em uma das minhas funções de configuração do módulo. Este parágrafo dos documentos que acabei encontrando explica por que isso não funciona:
Isso significa que você pode injetar provedores nas funções module.config (...), mas não pode injetar serviços, pois é necessário aguardar até que module.run (...) ou expor um provedor que você pode injetar no módulo. config
fonte
Para mim, esse erro foi causado pela execução da versão minificada do meu aplicativo angular. Documentos angulares sugerem uma maneira de contornar isso. Aqui está a citação relevante que descreve o problema e você pode encontrar a solução sugerida nos próprios documentos aqui :
fonte
Como este é o principal resultado para "fornecedor desconhecido de angularjs" no Google no momento, aqui está outra dica. Ao fazer o teste de unidade com o Jasmine, verifique se você tem esta declaração em sua
beforeEach()
função:Caso contrário, você receberá esse mesmo erro em seus testes.
fonte
Ainda outro caso em que esse erro ocorrerá, se seu serviço estiver definido em um arquivo javascript separado, verifique se você o referenciou! Sim, eu sei, erro de novato.
fonte
Eu estava esquecendo de injetar o arquivo que continha meus serviços por completo. Lembre-se de fazer isso ao inicializar seu módulo de aplicativo:
fonte
No meu caso, usei uma função anônima como invólucro para o módulo angular, assim:
Depois de fechar os parênteses, esqueci de chamar a função anônima abrindo e fechando os parênteses novamente como acima.
fonte
Para mim, o problema era carregamento lento; Carreguei meu controlador e serviço com atraso, para que eles não estivessem disponíveis no carregamento da página (e na inicialização Angular). Eu fiz isso com uma tag ui-if, mas isso é irrelevante. A solução foi carregar o serviço já com o carregamento da página.
fonte
Aqui está outro cenário possível em que você pode ver este erro:
Se você usar o Sublime Text 2 e o plug-in angular, ele gerará stubs como este
observe o vazio '' como o primeiro elemento da matriz após a sequência 'utilFactory'. Se você não possui nenhuma dependência, remova-a para que fique assim:
fonte
Como esta pergunta é o melhor resultado do Google, adicionarei outra coisa possível à lista.
Se o módulo que você está usando apresentar uma falha no wrapper de injeção de dependência, ele fornecerá o mesmo resultado. Por exemplo, os módulos copiar e colar da Internet podem contar com underscore.js e tentar injetar '_' no di wrapper. Se o sublinhado não existir nos provedores de dependência do projeto, quando o controlador tentar referenciar a fábrica do seu módulo, ele receberá 'fornecedor desconhecido' para a sua fábrica no log do console do navegador.
fonte
O problema para mim foi que havia alguns novos arquivos javascript que criei que faziam referência ao serviço, mas o Chrome viu apenas a versão mais antiga. Um CTRL + F5 corrigiu para mim.
fonte
Eu recebi um erro de "provedor desconhecido" relacionado a zombarias angulares (ngMockE2E) ao compilar meu projeto com o Grunt. O problema era que as zombarias angulares não podem ser minificadas, então tive que removê-lo da lista de arquivos minificados.
fonte
Depois de lidar com esse erro também, posso suportar esta lista de respostas com meu próprio caso.
Ao mesmo tempo, é simples e burra (talvez não seja burra para iniciantes como eu, mas sim para especialistas), a referência de script para angular.min.js deve ser a primeira da sua lista de scripts na página html.
Isso funciona:
Isso não:
Aviso sobre o angular.min.js.
Espero que ajude alguém !! :)
fonte
Meu problema foi com Yeoman, usando (maiúsculo):
Arquivos criados (sem capitalização):
mas o arquivo index.html incluía (capitalizado):
Espero que isso ajude alguém.
fonte
Mais uma possibilidade.
Eu tive
unknown Provider <- <- nameOfMyService
. O erro foi causado pela seguinte sintaxe:Angular estava procurando a
''
dependência.fonte
Meu cenário pode ser um pouco obscuro, mas pode causar o mesmo erro e alguém pode experimentar, portanto:
Ao usar o serviço $ controller para instanciar um novo controlador (que estava esperando '$ scope' como seu primeiro argumento injetado), eu estava passando o novo escopo local do controlador para o segundo parâmetro da função $ controller (). Isso levou o Angular a tentar invocar um serviço $ scope que não existe ( embora, por algum tempo, eu realmente tenha pensado em como excluir o serviço '$ scope' do cache do Angular ). A solução é agrupar o escopo local em um objeto locals:
fonte
Nenhuma das respostas acima funcionou para mim, talvez eu estivesse me enganando completamente, mas como iniciante é isso que fazemos.
Eu estava inicializando o controlador em um
div
para ter uma lista:E então usando
$routeProvider
para mapear uma URL para o mesmo controlador. Assim que eu removing-init
o controlador funcionou com a rota.fonte
Eu tive o mesmo problema. Corrigi isso usando em
$('body').attr("ng-app", 'MyApp')
vez de<body ng-app="MyApp">
boostrap.Porque eu fiz
para requisitos de arquitetura.
fonte
No meu aplicativo Ruby on Rails, eu fiz o seguinte:
Isso foi feito no ambiente de 'desenvolvimento', que reduziu o Angular.js e o incluiu no
/public/assets/application.js
arquivo.A remoção dos
/public/assets/*
arquivos resolveu o problema para mim.fonte
Enfrentei um problema semelhante hoje e os problemas eram realmente muito pequenos
Se você observar o bloco acima, na primeira linha, observará que eu injetei $ scope por engano, o que está incorreto. Eu removi essa dependência indesejada para resolver o problema.
fonte
Eu tive esse erro depois de criar uma nova fábrica e usá-lo em um componente, mas não verifiquei as especificações desses componentes
fonte
Outra 'pegadinha': eu estava recebendo esse erro ao injetar $ timeout, e levou alguns minutos para perceber que eu tinha espaço em branco nos valores da matriz. Isso não vai funcionar:
Publicar apenas no caso de alguém ter um erro bobo como este.
fonte
Meu caso foi de digitação desonesta
função tem um 'c'!
fonte