¿Cómo uso $ on en un servicio en angular?

Pude hacer que el controlador usara $ on listener con $scope.$on .

pero no veo ninguna documentación sobre cómo obtener servicios para escuchar eventos.

Intenté $rootScope.$on , pero eso solo permite un oyente. Quiero oyentes en servicios múltiples, independientemente de si sus controladores principales están dentro del scope o no.

después de experimentar bastante, resulta que obtener eventos para el servicio se puede hacer con un código mínimo.

El código de servicio de ejemplo se muestra en caso de que alguien más se encuentre con esto.

El ejemplo guarda y restaura el modelo de servicio al almacenamiento local cuando recibe las respectivas transmisiones

 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("restrestate", service.RestoreState); return service; }]); 

Como $on es un método de scope, puede crear un scope en su servicio y luego escuchar eventos en él:

 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'); } 

violín

Sin embargo, no recomendaría este enfoque, ya que los ámbitos no están normalmente asociados a los servicios.