Eu consegui fazer o controller usar o $ on listener com $scope.$on
.
mas eu não vejo nenhuma documentação sobre como obter serviços para ouvir events.
Eu tentei $rootScope.$on
, mas isso só permite um ouvinte. Eu quero ouvintes em vários serviços, independentemente de seus controladores pai estão no escopo ou não.
depois de experimentar um pouco, acontece que a obtenção de events para o serviço pode ser feita com um código mínimo.
Exemplo de código de serviço segue no caso de alguém mais se deparar com isso.
O exemplo salva e restaura o modelo de serviço para armazenamento local quando recebe as respectivas transmissões
app.factory('userService', ['$rootScope', function ($rootScope) { var service = { model: { name: '', email: '' }, SaveState: function () { sessionStorage.userService = angular.toJson(service.model); }, RestoreState: function () { service.model = angular.fromJson(sessionStorage.userService); } } $rootScope.$on("savestate", service.SaveState); $rootScope.$on("restorestate", service.RestoreState); return service; }]);
Como $on
é um método de escopo, você poderia criar um escopo em seu serviço e, em seguida, ouvir events nele:
app.factory('myService', function($rootScope) { var scope = $rootScope.$new(); // or $new(true) if you want an isolate scope scope.$on('testEvent', function() { console.log('event received'); }) return {} }); function MyCtrl($scope, myService, $rootScope) { $rootScope.$broadcast('testEvent'); }
violino
No entanto, eu não recomendaria essa abordagem, pois os escopos não são normalmente associados aos serviços.