Estive analisando o tópico https://cursos.alura.com.br/forum/topico-como-compartilhar-uma-propriedade-entre-a-diretiva-e-o-controller-21747
Nesse tópico que trata da exclusão do foto com consequente atualização da lista conforme exercício bônus é proposta uma solução para escutar o evento através do $rootScope.on
mas neste caso não deveria ser $rootScope.$on(...)
ao invés de $rootScope.on(...)
(Sem o $)?
Recebo o evento disparado, porem a lista não esta sendo atualizada dinamicamente. Como poderia manipular o DOM dinamicamente neste caso?
Essa implementação deveria ser realizada no ddo.controller
ou no ddo.link
?
Segue abaixo minhas alterações:
Arquivo minhas-diretivas.js
//Omitido restante do arquivo
.directive('meusTitulos', function() {
var ddo = {};
ddo.restrict = 'E';
ddo.template = '<ul><li ng-repeat="titulo in titulos">{{titulo}}</li></ul>';
ddo.controller = function($rootScope, recursoFoto) {
recursoFoto.query(function(fotos) {
$rootScope.titulos = fotos.map(function(foto) {
return foto.titulo;
});
});
$rootScope.$on("fotoRemovida", function(foto) {
$rootScope.titulos.splice($rootScope.titulos.indexOf(foto.titulo, 1));
});
};
return ddo;
});
Arquivo fotos-controller.js
...
$scope.remover = function(foto){
recursoFoto.remove({fotoId: foto._id}, function(){
var indiceFoto = $scope.fotos.indexOf(foto);
$scope.fotos.splice(indiceFoto, 1);
//Alteração AQUI - Usei o $emit para o evento chegar ao $rootScope
$scope.$emit('fotoRemovida', foto);
$scope.mensagem = 'Foto ' + foto.titulo + ' removida com sucesso!';
}, function(erro){
$scope.mensagem = 'Falha ao remover a foto ' + foto.titulo;
console.log(erro);
});
};
});
Grato