Como faço para usar $ on em um serviço em angular?

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.