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.