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

Aula 7 - $scope.remover

Prezados, boa tarde,

quando da exclusão da foto foi feito:

$scope.remover = function(foto) {
    $http.delete('v1/fotos/' + foto._id)
    .success(function() {
        var indiceFoto = $scope.fotos.indexOf(foto);
        $scope.fotos.splice(indiceFoto, 1);
        $scope.mensagem = 'Foto ' + foto.titulo + ' removida com sucesso!!!';
    })
    .error(function(erro) {
        $scope.mensagem = 'deu pau na exclusão'
        console.log(erro);
    });
};

A respeito do foto._id, este campo foi selecionado porque o back-end tem este campo para excluir? Ou seria uma propriedade do Angular? Pergunto porque não se trata de um atributo id do HTML. Ao invés de utilizar foto._id, poderia utilizar $scope.fotos.indexOf(foto)???

Outra questão sobre a exclusão: o elemento

não é exibido. Tive que alterar para para aparecer, mantive os mesmos atributos.

<span class="alert alert-info" ng-show="mensagem.length">{{mensagem}}</span>

Qual o mistério?

3 respostas
solução!

Oi Jose, veja o seguinte trecho de código:

 $http.delete('v1/fotos/' + foto._id)

Aqui ele está realizando uma requisição com o verbo DELETE para o endereço localhost:3000/v1/fotos/IdDaSuaFoto

Por exemplo, se foto._id for 1, temos a URL montada v1/fotos/1, que fará com que o $http realize uma requisição para v1/fotos/1. É o seu servidor que está preparado para receber essa URL, extrair o ID da foto e apagá-la do banco. Contudo, isso apaga apenas lá no servidor e a lista que alimenta sua view ainda contém a foto. É por isso que precisamos apagá-la.

Já na lista, usamos indexOf passando o objeto foto como um todo, não o seu ID. Passamos o objeto todo porque a lista é de objetos e não de ID's.

Agora, só para ficar ainda mais claro. Quando você inclui uma foto (que não possui ID), o banco de dados embutido no servidor do treinamento gera esse _id para você com um número único. É por isso que quando você obtém a lista de fotos cadastradas no servidor, todas as fotos vem com _id.

Caso você queria saber como o servidor desse curso é criado, mas além disso, criar algo mais profissional veja nosso curso de MEAN:

https://cursos.alura.com.br/course/mean-javascript

Abraço

Excelente. Obrigado. Já fiz inscrição neste curso. Assim que acabar o AnhularJs vou ler um livro e volto pra cá com o Mean.

Esse treinamento de MEAN baseado no backend do curso de Angular foi pedido dos alunos. Muitos tinham uma lacuna nessa parte de backend. Espero que goste.

Sucesso e bom estudo Jose!