Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Error: [$injector:unpr]

Estou adicionando algumas coisas no Alurapic para dar continuidade ao meu conhecimento, e me deparei com o seguinte problema:

angular.min.js:102 Error: [$injector:unpr] http://errors.angularjs.org/1.3.15/$injector/unpr?p0=recursoNoticiaProvider%20%3C-%20recursoNoticia%20%3C-%20NoticiasController
    at http://localhost:3000/js/lib/angular.min.js:6:417
    at http://localhost:3000/js/lib/angular.min.js:38:7
    at Object.d [as get] (http://localhost:3000/js/lib/angular.min.js:36:13)
    at http://localhost:3000/js/lib/angular.min.js:38:81
    at d (http://localhost:3000/js/lib/angular.min.js:36:13)
    at e (http://localhost:3000/js/lib/angular.min.js:36:283)
    at Object.instantiate (http://localhost:3000/js/lib/angular.min.js:36:432)
    at http://localhost:3000/js/lib/angular.min.js:76:49
    at link (http://localhost:3000/js/lib/angular-route.min.js:7:268)
    at $ (http://localhost:3000/js/lib/angular.min.js:70:197) <ng-view class="ng-scope">

Esse erro acontece quando estou tentando acessar a URL /#/noticia/cadastro

O meu controller esta assim:

angular.module('alurapic')
    .controller('NoticiaController', function($scope, recursoNoticia, $routeParams, cadastroDeNoticias) {

        $scope.noticia = {};
        $scope.mensagem = '';

        if($routeParams.noticiaId) {
            recursoFoto.get({noticiaId: $routeParams.noticiaId}, function(noticia) {
                $scope.noticia = noticia;
            }, function(erro) {
                console.log(erro);
                $scope.mensagem = 'Não foi possível obter a foto'
            });
        }

        $scope.submeter = function() {
            if ($scope.formulario.$valid) {
                cadastroDeNoticias.cadastrar($scope.noticia)
                    .then(function(dados) {
                        $scope.mensagem = dados.mensagem;
                        if (dados.inclusao) $scope.noticia = {};
                    })
                    .catch(function(erro) {
                        $scope.mensagem = erro.mensagem;
                    });
            }
        };
    });

Eu fiz um total CTRL C + CTRL V de foto e fui trocando para o modelo noticia que eu criei. Provavelmente devo ter esquecido de algo, mas ja revisei tudo e não encontrei o problema.

5 respostas

Você chegou a clicar no link do erro? Ele sempre te leva para o site e te mostra e mensagem de erro.

Veja o que ele exibiu para mim:

Unknown provider: recursoNoticiaProvider <- recursoNoticia <- NoticiasController

Seu projeto não é do curso, não sei como ele esta organizado. Mas o código deixa claro que não há um recursoNoticiaProvider, por isso a injeção de recursoNotiicia em NoticiasController não funciona. É bem típico ser erro de digitação na importação dos seus arquivos. É um chute, confere seu index.html e os nomes que usou.

Como falei, e o Alurapic. E o mesmo projeto final do curso de MEAN. Eu apenas criei uma nova entidade noticia com base em fotos.

Eu cliquei no link do erro e fui para a seguinte pagina: https://docs.angularjs.org/error/$injector/unpr?p0=recursoNoticiaProvider%20%3C-%20recursoNoticia%20%3C-%20NoticiaController

Verifiquei aqui o meu noticia-servico:

angular.module('noticiaServicos', ['ngResource'])
    .factory('recursoNoticia', function($resource) {

        return $resource('/v1/noticias/:noticiaId', null, {
            'update' : {
                method: 'PUT'
            }
        });
    })
    .factory("cadastroDeNoticias", function(recursoNoticia, $q) {
        var service = {};
        service.cadastrar = function(noticia) {
            return $q(function(resolve, reject) {

                if(noticia._id) {
                    recursoNoticia.update({noticiaId: noticia._id}, noticia, function() {
                        resolve({
                            mensagem: 'Noticia ' + noticia.titulo + ' atualizada com sucesso',
                            inclusao: false
                        });
                    }, function(erro) {
                        console.log(erro);
                        reject({
                            mensagem: 'Não foi possível atualizar a noticia ' + noticia.titulo
                        });
                    });

                } else {
                    recursoFoto.save(noticia, function() {
                        resolve({
                            mensagem: 'Noticia ' + noticia.titulo + ' incluída com sucesso',
                            inclusao: true
                        });
                    }, function(erro) {
                        alert('Não Resolveu');
                        reject({
                            mensagem: 'Não foi possível incluir a noticia ' + noticia.titulo
                        });
                    });
                }
            });
        };
        return service;
    });

Tambem conferi os meus imports no index.html:

<script src="js/controllers/noticia-controller.js"></script>
        <script src="js/controllers/noticias-controller.js"></script>
        <script src="js/directives/minhas-diretivas.js"></script>
        <script src="js/services/meus-servicos.js"></script>
        <script src="js/services/noticia-servico.js"></script>
        <script src="js/services/token-interceptor.js"></script>

Estou verificando se escrevi algum nome errado nas definições do provider

solução!

Seu NoticiaController pertence a um módulo certo? Este módulo precisa importar o módulo que possui o serviço que você quer injetar. Confere lá, pois você não postou esse código.

Realmente! Eu esqueci de colocar o 'noticiaServicos' la no main.js

Agradeço a ajuda!

Esses erros são interessantes, porque acabamos revisando várias coisas do framework.

Sucesso e bom estudo Rafael!