Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Error: $injector:undef Undefined Value

Realizando o exercício me deparei com o seguinte problema.

Error: $injector:undef Undefined Value

Provider 'salvarUsuario' must return a value from $get factory method. Description This error results from registering a factory which does not return a value (or whose return value is undefined).

The following is an example of a factory which will throw this error upon injection:

angular.module("badModule", []). factory("badFactory", function() { doLotsOfThings(); butDontReturnAValue(); }); In order to prevent the error, return a value of some sort, such as an object which exposes an API for working with the injected object.

angular.module("goodModule", []). factory("goodFactory", function() { doLotsOfThings(); butDontReturnAValue();

return { doTheThing: function methodThatDoesAThing() { } }; });

A versão do angular é : 1.5.8

Os fontes são:

angular.module('meusServicos', ['ngResource'])

.constant("LINK", "http://localhost/gsi/api")

.factory('recursoUsuario', function($resource, LINK) {
    return $resource(LINK + '/usuario/:id', null, {
        'update': {
            method: 'POST'
        },
        'query': {
            method: 'GET',
            isArray: false
        }
    });
})

.factory('recursoUsuarios', function($resource, LINK) {
    return $resource(LINK + '/usuarios/', null, {
        'update': {
            method: 'POST'
        },
        'query': {
            method: 'GET',
            isArray: false
        }
    });
})

.factory('salvarUsuario', function(recursoUsuario, $q) {
    var service = {};
    return service.salvar = function(usuario) {
        return $q(function(resolve, reject) {
            if (usuario.id) {
                recursoUsuario.update({
                    id: usuario.id
                }, usuario, function() {
                    resolve({
                        mensagem: 'Usuario atualizado com sucesso'
                    });
                }, function(erro) {
                    console.log(erro);
                    reject({
                        mensagem: 'Não foi possível atualizar'
                    });
                });
            } else {
                mensagem: 'Nenhum item selecionado'
            }
        })
        return service;
    }
});
angular.module('app').controller('UsuariosEditarController', function($scope, recursoUsuario, $routeParams, salvarUsuario) {
    $scope.mensagem = '';
    $scope.pageSize = 8;
    $scope.usuario = {};
    $scope.botoes = [{
        "titulo": "Usuários",
        "img": "usersgroup.png",
        "url": "usuarios",
        "class": "disabled"
    }, {
        "titulo": "Dados Gerais",
        "img": "dadosgerais.png",
        "url": "dadosgerais"
    }];

    $scope.caminhos = [{
        "titulo": "Início",
        "url": "principal"
    }, {
        "titulo": "Usuários",
        "url": "usuarios"
    }, {
        "titulo": "Editar usuário",
        "class": "active"
    }];

    if ($routeParams.id) {
        recursoUsuario.query({
            id: $routeParams.id
        }, function(usuario) {
            console.log(usuario);
            $scope.usuario = usuario;
        }, function(erro) {
            console.log(erro);
            $scope.mensagem = 'Não foi possível obter o usuario'
        });
    }

    $scope.submeter = function(formUsuario) {
        console.log(formUsuario);
        if (formUsuario) {
            salvarUsuario.salvar($scope.usuario)
                .then(function(dados) {
                    $scope.mensagem = dados.mensagem;
                    if (dados.inclusao) $scope.foto = {};
                })
                .catch(function(erro) {
                    $scope.mensagem = erro.mensagem;
                });
        }
    }

    function cleanResponse(resp) {
        return $.map(JSON.parse(angular.toJson(resp)), function(el) {
            return el
        });
    }
});

A fim de estudo de fixação não utilizei o mesmo nome nos serviços, mas a ideia é igual do exercicio 07.

1 resposta
solução!

O fonte corrigido é este, pode encerrar.

.factory('salvarUsuario', function(recursoUsuario, $q) {
        var service = {};
        service.salvar = function(usuario) { //removi o return que não deve esta aqui
            return $q(function(resolve, reject) {
                if (usuario.id) {
                    recursoUsuario.update({
                        id: usuario.id
                    }, usuario, function() {
                        resolve({
                            mensagem: 'Usuario atualizado com sucesso'
                        });
                    }, function(erro) {
                        console.log(erro);
                        reject({
                            mensagem: 'Não foi possível atualizar'
                        });
                    });
                } else {
                    mensagem: 'Nenhum item selecionado'
                }
            });// ; que faltava
        };// ; que faltava
        return service;
    })