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

Comunicação entre módulos diferentes

Olá,

Estou precisando disparar um evento em broadcast em um módulo da minha aplicação. Porém preciso que este mesmo 'evento' seja escutado por um controller que está em outro módulo. Utilizando o $rootScope com $broadcast e $on não está funcionando. Algém já teve essse problema ou sabe como resolver?

Obrigado desde já! ;)

4 respostas

Olá Luca, Usando o $broadcast fica assim:

$scope.methodHere = function() {
    $rootScope.$broadcast('go');
}

E para receber a transmissão use $scope do controller:

$scope.$on('go', function(event, args) {

});

E se você quiser passar argumentos com $broadcast:

$rootScope.$broadcast('go', { argument: {} });

E depois:

$scope.$on('go', function(event, args) {
    var anyThing = args.argument;
});

Você pode encontrar mais informação na documentação: https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$on

Luca, a explicação do Bruno está ótima, só completo que há uma diferença entre $broadcast e $emit. O primeiro dispara o evento para os elementos filhos (desce na hierarquia) o segundo sobe a hierarquia e dispara o evento para os elementos pais.

Continua não funcionando :(

No meu 'modulo1' onde disparo o evento está assim

// Lança o evento em broadcast $rootScope.$broadcast('contentLoaded', response);

E em um segundo módulo preciso escutar este evento:

$scope.$on('contentLoaded', function(event, param) { console.log("contentLoaded - CONTROLLER: ", param); });

O que pode estar errado?

solução!

Está funcionando! Ne verdade havia um problema na ordem gronológica dos eventos, quando eu recebia a resposta do servidor e lançava o evento o controller não tiha sido carregado ainda e por isso não 'recebia o evento'!! Obrigado pela atenção!!