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

Meu controller deixa de funcionar ao adicionar o array no parâmetro

Conforme orientação do curso, adicionei o array com os artefatos que o controller vai precisar ,exatamente como o sugerido no exercício 8, porém ao executar o código novamente o controller deixa de funcionar.

No console do navegador exibe o seguinte erro:

Error: [ng:areq] http://errors.angularjs.org/1.3.15/ng/areq?p0=FotoController&p1=not%20aNaNunction%2C%20got%string
    at http://localhost:3000/js/lib/angular.min.js:6:417
    at Rb (http://localhost:3000/js/lib/angular.min.js:19:510)
    at sb (http://localhost:3000/js/lib/angular.min.js:20:78)
    at http://localhost:3000/js/lib/angular.min.js:75:396
    at link (http://localhost:3000/js/lib/angular-route.min.js:7:268)
    at $ (http://localhost:3000/js/lib/angular.min.js:70:197)
    at B (http://localhost:3000/js/lib/angular.min.js:59:255)
    at g (http://localhost:3000/js/lib/angular.min.js:51:335)
    at http://localhost:3000/js/lib/angular.min.js:50:444
    at http://localhost:3000/js/lib/angular.min.js:52:322

Assim o código funciona

angular.module('alurapic').controller('FotoController', 

    function($scope, cadastroDeFotos, recursoFoto, $routeParams) {

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

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

        $scope.submeter = function() {

            if ($scope.formulario.$valid) {

                cadastroDeFotos.cadastrar($scope.foto)
                .then(function(dados) {
                    $scope.mensagem = dados.mensagem;
                    if (dados.inclusao) $scope.foto = {};

                })
                .catch(function(dados) {
                    $scope.mensagem = dados.mensagem;
                });
            }
        };
});

e Assim não:

angular.module('alurapic').controller('FotoController', 
    ['$scope', 'cadastroDeFotos', 'recursoFoto', '$routeParams'],
    function($scope, cadastroDeFotos, recursoFoto, $routeParams) {

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

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

        $scope.submeter = function() {

            if ($scope.formulario.$valid) {

                cadastroDeFotos.cadastrar($scope.foto)
                .then(function(dados) {
                    $scope.mensagem = dados.mensagem;
                    if (dados.inclusao) $scope.foto = {};

                })
                .catch(function(dados) {
                    $scope.mensagem = dados.mensagem;
                });
            }
        };
});

se removo o array meu código funciona perfeitamente novamente.

Neste caso o que posso fazer pra melhorar meu código assim como sugerido no exercício?

2 respostas
solução!

Faz tempo que eu não mexo no angular 1.x mas acredito que a function também é um membro do array de injeção de dependência.

Nesse caso seu codigo deveria ficar assim:

angular.module('alurapic').controller('FotoController', 
    ['$scope', 'cadastroDeFotos', 'recursoFoto', '$routeParams',
    function($scope, cadastroDeFotos, recursoFoto, $routeParams)  { 
    /* Resto da controller */
}]);

Tenta rodar desse jeito.

funcionou perfeitamente! obrigado pela ajuda marcos

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software