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

De onde Vem o '$scope.remover'?

O 'remover' é um método existente no back-end? Se sim, esse método seria na controller? por exemplo, em uma aplicação asp.net mvc, a controller do angular mandaria uma requisição 'remove' para onde?, afinal posso criar uma aplicação asp.net mvc usando Angular correto? Desculpem a pergunta básica é que fiquei em dúvida em como seria trabalhado o back-end, visto que sou dev .Net e no trabalho pegamos um projeto em Angular no front e estou apanhando demais hehehehe.

4 respostas

No angular 1 o $scope é um objeto associado a cada controller, com ele podemos conectar variáveis e funções no nosso javascript ao html com facilidade. No caso da aula o professor adicionou ao $scope a propriedade remover e essa propriedade recebeu uma função. Então quando chamarmos essa função no nosso html com o ng-click:

<button class="btn btn-danger btn-block" 
            ng-click="remover(foto)">
            Remover
 </button>

A funcão abaixo será executada, removendo o elemento do back-end e do array de fotos no front.

$scope.remover = function(foto) {

        $http.delete('/v1/fotos/' + foto._id)
        .success(function() {
            var indiceDaFoto = $scope.fotos.indexOf(foto);
            $scope.fotos.splice(indiceDaFoto, 1);
            $scope.mensagem = 'Foto ' + foto.titulo + ' removida com sucesso!';

        })
        .error(function(erro) {
            console.log(erro);
            $scope.mensagem = 'Não foi possível apagar a foto ' + foto.titulo;
        });
    };

Vinicius, entendi, mas de onde vem o 'remover'? É uma propriedade já existente do back-end?

O $scope entendi, obrigado pela explicação.

solução!

Como o $scope é um objeto você pode adicionar novas propriedades nele. Você pode criar um $scope.remover, $scope.adicionar, $scope.qualquerCoisa, etc. O professor criou o remover pra guardar nele uma função cuja responsabilidade é chamar o método que remove a foto no back e front-end. O $scope não se envolve em nada com o back-end, a gente só usa ele no front pra ligar o javascript com o html.

Quem deleta a foto no back-end é esse trecho de código:

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

Esse trecho faz uma requisição pro nosso back-end solicitando a remoção dessa foto e se a gente receber um status ok removemos ela do front:

.success(function() {
            var indiceDaFoto = $scope.fotos.indexOf(foto);
            $scope.fotos.splice(indiceDaFoto, 1);
            $scope.mensagem = 'Foto ' + foto.titulo + ' removida com sucesso!';

        })

A idéia do $scope é criar um jeito fácil de conectar nossa view(HTML) a nossa controller(javascript). O $scope é um objeto compartilhado pelas duas partes no angular 1. Portanto quando criamos um $scope.foto na nossa controller poderemos usar na nossa view esse $scope.foto apenas como "foto".

Show de bola Vinicius, explicou com muita clareza!

Agradeço também pela paciência!

Muito Obrigado!