Quando eu clico em salvar o console me retorna um erro mas não especifica no meu arquivo onde é.
TypeError: Cannot read property 'compile' of undefined angular.min.js:102
Quando eu clico em salvar o console me retorna um erro mas não especifica no meu arquivo onde é.
TypeError: Cannot read property 'compile' of undefined angular.min.js:102
No node.js aparece esse erro:
{ [Error: Can't insert key E18e8augUd5ixcde, it violates the unique constraint] key: 'E18e8augUd5ixcde', errorType: 'uniqueViolated' }
É projeto do curso ou projeto pessoal? Você esta tentando salvar um elemento que já possui ID! Ai viola a chave primária.
Projeto do curso,professor. Eu sei que estou violando, mas não consigo modificá-lo
Quando você salva uma foto, você tem que usar $http.post para incluir e $http.put para alterar, caso contrário você terá esse tipo de programa.
Se você já chegou na parte de $resource, para enviar você usa .save
e para atualizar .update
.
Dá uma checada na lógica do seu controller FotoController.js
se ele verifica se o ID foi passado. Se foi, ele sabe que é para alterar, se não foi , ele sabe que é para incluir.
Está tudo nos conformes, professor:
if($scope.formulario.$valid){
if($scope.foto._id){ // se a foto possui um ID, o codigo abaixo é para alterá-lo
$http.put('v1/fotos/' + $scope.foto._id, $scope.foto)
.success(function(){
$scope.mensagem = 'Foto alterada com sucesso';
})
.error(function(erro){
console.log(erro);
$scope.mensagem = 'Nao foi possivel alterar a foto' + $scope.foto.titulo;
});
}
else{ //senão tiver id, o codigo abaixo é para cadastra-lo
$http.post('v1/fotos', $scope.foto)
.success(function(){
$scope.foto = {};
$scope.mensagem ='Cadastro com sucesso';
})
.error(function(erro){
console.log(erro);
$scope.mensagem='Não foi possivel cadastrar';
});
Mesmo assim perssiste!
Código do controller completo?
Você esta usando o backend do curso ou criou outro backend?
Fique tranquilo mais de 1000 pessoas já passaram dessa parte sem qualquer problema.
Estou utilizando TUDO do curso
Segue o código completo do foto-controller.js
angular.module('alurapic').controller('FotoController', function($scope, $http, $routeParams){
// routeParams dá acesso ao parametros que foram enviados para rota de acesso
$scope.foto = {}; // na nossa view foto.html está definida "foto." para nossos ng-model
$scope.mensagem ='';
if($routeParams.fotoId){
//buscar a foto no servidor SE o parametro foi passado
$http.get('v1/fotos/'+ $routeParams.fotoId) //buscando a foto com o id passado
.success(function(foto){
$scope.foto = foto;
})
.error(function(erro){
console.log(erro);
$scope.mensagem = 'Não foi possivel obter a foto desejada';
});
}
///////////////////////////////////////////////////////////////////////////////////////////////////
$scope.submeter = function(){
if($scope.formulario.$valid){
if($scope.foto._id){ // se a foto possui um ID, o codigo abaixo é para alterá-lo
$http.put('v1/fotos/' + $scope.foto._id, $scope.foto)
.success(function(){
$scope.mensagem = 'Foto alterada com sucesso';
})
.error(function(erro){
console.log(erro);
$scope.mensagem = 'Nao foi possivel alterar a foto' + $scope.foto.titulo;
});
}
else{ //senão tiver id, o codigo abaixo é para cadastra-lo
$http.post('v1/fotos', $scope.foto)
.success(function(){
$scope.foto = {};
$scope.mensagem ='Cadastro com sucesso';
})
.error(function(erro){
console.log(erro);
$scope.mensagem='Não foi possivel cadastrar';
});
}
}
};
});
Não consigo sair daqui :(
Mas vai sair :)
Faça o seguinte, eu dei uma olhada de relance no seu código e não detectei um problema.
Poste o código do seu main.js
e também o template principal.html
. Eu preciso delas para montar o quebra cabeças.
angular.module('alurapic', ['minhasDiretivas', 'ngRoute'])
.config(function($routeProvider, $locationProvider){ //configurando uma rota
$locationProvider.html5Mode(true);
$routeProvider.when('/fotos', { // chamando a rota e definindo que QUANDO (when), o usuario acessar a rota de '/fotos'...
templateUrl: 'partials/principal.html', // enviaremos um tampleteUrl (nosso html) na view parcial
controller: 'FotosController' //indicando o controlador para a parcial chamada acima
});
$routeProvider.when('/fotos/news',{ // quando for acessada a rota fotos/news
templateUrl: '/partials/foto.html', //vamos enviar esse tamplate
controller: 'FotoController'
});
$routeProvider.when('/fotos/edit/:fotoId',{ //para linkar com o id da foto
templateUrl : 'partials/foto.html',
controller : 'FotoController'
});
$routeProvider.otherwise({redirectTo: '/fotos'}); //Se for digitada uma URL não existente, ele nos jogará para essa url determinada
}); //todas as diretivas criadas da sua aplicação,precisa ser definidas aqui
Estes está todinho comentado, me perdoe caso não entenda...
<!-- principal -->
<div class="jumbotron">
<h1 class="text-center">Alurapic</h1>
</div>
<p ng-show="mensagem.length" class="alert alert-info">{{mensagem}}</p>
<div class="row">
<div class="col-md-12">
<form>
<div class="input-group">
<span class="input-group-btn">
<a href="fotos/news" class="btn btn-primary">Nova Imagem</a>
</span>
<input class="form-control" ng-model="filtro" placeholder="Filtrar por Título da imagem"/>
</div>
</form>
<br>
</div>
</div><!-- fim row -->
<!-- painel -->
<div class="row">
<!-- ng-repeat: para repetir os painel -->
<meu-painel class="col-md-2" ng-repeat="foto in fotos | filter: filtro" titulo={{foto.titulo}}>
<img class="img-responsive center-block" src="{{foto.url}}" alt="{{foto.titulo}}"/>
<hr>
<a class="btn btn-primary btn-block" href="fotos/edit/{{foto._id}}">Editar</a>
<button ng-click="remover(foto)" class="btn btn-danger btn-block">Remover</button
</meu-painel><!-- fim painel-->
</div>
Eu testei seu código, cortando e colocando no meu projeto e funcionou. Só se você alterou outra coisa, mas se você diz que tão tá valendo.
Faça o seguinte: talvez você esteja alterado um dado que foi salvo problemático no banco. Pare seu servidor, vá até a pasta alurapic
e apague o arquivo data.db
. Depois, suba o servidor novamente e recarregue a página. Não pode exibir nada para o usuário.
Vá e cadastre uma foto, depois volte, edite a foto e veja se salva.
Nunca vi isso acontecer com ninguém, mas é uma hipótese quente para seu problema.
Professor,muito obrigado... Deu certo !!