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

Como compartilhar uma propriedade entre a diretiva e o controller?

No bônus da diretiva meusTitulos, quando excluo uma foto, ela permanece na lista. Para contornar isso, utilizei a propriedade titulos no $rootScope. É a melhor forma de fazer, ou existe alguma outra maneira?

Diretiva:

.directive('meusTitulos', function () {
        return {
            restrict: 'E',
            controller: function ($rootScope, recursoFoto) {
                $rootScope.titulos = [];

                recursoFoto.query(function (fotos) {
                    $rootScope.titulos = fotos.map(function (foto) {
                        return foto.titulo;
                    });
                });
            },
            template: "<ul><li ng-repeat='titulo in titulos'>{{titulo}}</li></ul>"
        };
    });

E em remover() do meu FotosController:

$rootScope.titulos.splice($rootScope.titulos.indexOf(foto.titulo, 1));
5 respostas
solução!

É bom evitar o uso indiscriminado do $rootScope, contudo, nessa situação, é uma saída válida sim. Relaxe!

Quando a diretiva foi criada, foi para mostrar outra forma de se fazer. Eu não tinha em mente que o aluno gostaria de sincronizar essa informação.

Outro ponto importante é que ao invés de pedir uma solução, você já trouxe uma pronta para ver se tinha outra melhor. Perfeito isso!

Outra solução, sem ter que alterar muito era você disparar um evento. Tem um exercício que ensino um controller disparar um evento e que uma diretiva fica ouvindo. Ai seu controller não precisaria usar o rootScope.

No controller que remove você faria

 $scope.$broadcast('fotoRemovida', foto);

O segundo parâmetro é o dado da foto que foi removida, um objeto.

Na diretiva que cria os títulos, você escutaria o evento com

$rootScope.$on("fotoRemovida", function(foto) {
    // vc tem acesso a foto, então pode removê-la da lista. 
});

Eu não testei essa solução, mas me parece válida e evita pendurar dados no $rootScope. Bolei aqui agora.

Value, Flávio! Muito obrigado!!

Sucesso e bom estudo Carlos!

Flavio,

neste caso não deveria ser $rootScope.$on(...) ao invés de $rootScope.on(...) (Sem o $)?

Até

PS: Abri uma duvida complementar também em https://cursos.alura.com.br/forum/topico-exercicio-bonus-remover-titulo-da-lista-dinamicamente-30024 pois esse topico já estava fechado.

Se puder dar uma ajuda....