Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
10
respostas

Uncaught Error: [$injector:modulerr]

Fui seguindo o curso até a aula 6, depois reiniciei a máquina e não consigo mais acessar a aplicação. No terminal eu vou até a pasta alurapic e executo o comando npm start. A resposta "Banco data.db pronto para uso. Servidor..." aparece, mas quando acesso http://localhost:3000/ a tela fica em branco.

E vi também que o status dos arquivos na Developer Tools > Network, estão como 304.

Tenho que fazer mais alguma coisa?

10 respostas

Allan, no seu navegador abra o Inspetor e cole aqui o erro que aparece no Console. Se possível também o código que você tava mexendo antes de dar o erro.

Não lembro exatamente em qual arquivo estava mexendo, então colei todos.

****************Console*********************
Uncaught Error: [$injector:modulerr] http://errors.angularjs.org/1.3.15/$injector/modulerr?p0=alurapic&p1=TypeEr…20Jd%20(http%3A%2F%2Flocalhost%3A3000%2Fjs%2Flib%2Fangular.min.js%3A17%3A1)
    at angular.min.js:6
    at angular.min.js:35
    at r (angular.min.js:7)
    at g (angular.min.js:34)
    at ab (angular.min.js:38)
    at d (angular.min.js:17)
    at uc (angular.min.js:18)
    at Jd (angular.min.js:17)
    at angular.min.js:250
    at HTMLDocument.a (angular.min.js:164)
(anonymous) @ angular.min.js:6
(anonymous) @ angular.min.js:35
r @ angular.min.js:7
g @ angular.min.js:34
ab @ angular.min.js:38
d @ angular.min.js:17
uc @ angular.min.js:18
Jd @ angular.min.js:17
(anonymous) @ angular.min.js:250
a @ angular.min.js:164
c @ angular.min.js:32
DevTools failed to parse SourceMap: http://localhost:3000/js/lib/angular.min.js.map
DevTools failed to parse SourceMap: http://localhost:3000/js/lib/angular-animate.min.js.map
DevTools failed to parse SourceMap: http://localhost:3000/js/lib/angular-resource.min.js.map
DevTools failed to parse SourceMap: http://localhost:3000/js/lib/angular-route.min.js.map

Está tudo dentro da pasta public

****************index.html*********************
<!DOCTYPE html>
<html lang="pt-br" ng-app="alurapic">
    <head>
        <meta charset="UTF-8">
        <base href="/">
        <meta name="viewport" content="width=device-width">
        <title>Alurapic</title>
        <link rel="stylesheet" href="css/bootstrap.min.css">
        <link rel="stylesheet" href="css/bootstrap-theme.min.css">
        <link rel="stylesheet" href="css/efeitos.css">
        <script src="js/lib/angular.min.js"></script>
        <script src="js/lib/angular-animate.min.js"></script>
        <script src="js/lib/angular-resource.min.js"></script>
        <script src="js/lib/angular-route.min.js"></script>
        <script src="js/main.js"></script>
        <script src="js/controllers/fotos-controller.js"></script>
        <script src="js/directives/minhas-diretivas.js"></script>
    </head>
    <body>
        <div class="container">
            <ng-view></ng-view>
        </div>
    </body>
</html>

****************partials/principal.html*********************
<div class="jumbotron">
    <h1 class="text-center">Alurapic</h1>
</div>
<div class="row">
    <div class="col-md-12">
        <form>
            <input ng-model="filtro" ng-model-options="{debounce: 500}" type="text" class="form-control" placeholder="filtrar" />
        </form>
    </div>
</div>
<div class="row">
    <meu-painel ng-repeat="foto in fotos | filter: filtro" titulo="{{foto.titulo}}" class="col-md-2 painel-animado">
        <img src="{{foto.url}}" title="{{foto.titulo}}" class="img-responsive center-block" />
    </meu-painel>
</div>


**************js/directives/meu-painel.html***********************
<div class="panel panel-default">
    <div class="panel-heading">
        <h3 class="panel-title text-center">{{titulo}}</h3>
    </div>
    <div class="panel-body" ng-transclude>

    </div>
</div>

****************js/directives/minhas-diretivas.js*********************
angular.module('minhasDiretivas', []).directive('meuPainel', function() {
    var ddo = {};
    ddo.restrict = "AE";

    ddo.scope = {
        titulo    : '@'
    }

    ddo.transclude = true;

    ddo.templateUrl = 'js/directives/meu-painel.html'

    return ddo;
});


****************js/main.js*********************
angular.module('alurapic', ['minhasDiretivas', 'ngAnimate', 'ngRoute', 'ngResource']).config(function($routeProvider, $locationProvider) {

    $locationProvider.html5mode(true);

    $routeProvider.when('/fotos', {
        templateUrl    : 'partials/principal.html',
        controller    : 'FotosController'
    });

    $routeProvider.when('/fotos/novo', {
        templateUrl    : 'partials/cadastro.html',
        controller    : 'FotosController'
    });

    $routeProvider.otherwise({ redirectTo: '/fotos' });
});


****************js/controllers/fotos-controller.js*********************
angular.module('alurapic').controller('FotosController', function($scope, $http) {
    $scope.fotos = [];
    $scope.filtro = '';

    $http.get('v1/fotos').success(function(fotos) {
        $scope.fotos = fotos;
    }).error(function(erro) {
        console.log(erro);
    });
});

Ninguém aí pra me ajudar?

Cara aparentemente está tudo ok!

Falta ponto e virgula em duas partes do código em minhas-diretivas:

ddo.scope = {
        titulo    : '@'
    };

    ddo.transclude = true;

    ddo.templateUrl = 'js/directives/meu-painel.html';

Conserta isso e vê se resolve o erro

Cole toda a mensagem de erro que aparece no console do Chrome, sem exceção.

Quando ocorre um erro de injeção, é porque o caminho de um arquivo esta errado ou o nome do módulo. Dá uma verifica no caminho dos arquivos.

Peguei cada parte do seu código e testei, mesmo os que faltaram ponto e vírgula funcionaram.

Sendo assim, você precisa verificar se gravou os arquivos nas pastas corretas e com os nomes corretos condizentes com o importe que você realizou em index.html.

Opa..achei um erro.......

solução!

Você digitou errado este techo:

$locationProvider.html5mode(true);

O correto é

$locationProvider.html5Mode(true);

Sucesso e bom estudo meu aluno.

Nossa, era isso mesmo. Não sabia mais o que pesquisar.

Valeu!