Как начать автономный угловой сервис

У меня есть служба, которая наблюдает за чем-то в корневом каталоге и что-то делает в ответ. Никто другой не требует эту услугу в качестве зависимости. Как мне сказать службе начать делать свое дело?

Вот как я делаю это сейчас.

angular.module('app')
.service('myService', function ($rootScope) {

  return function () {
      $rootScope.$on("...", function () {
        //do stuff
      });
    };

})
.run(function (myService) {
  myService();
});

Есть ли более чистый способ сделать это?

1 ответ

Я реализовал подобные вещи, но с использованием директивы, а не службы:

app.directive('myDirective', function() {
  return {
    controller: function($scope) {
      $scope.$on('myEvent', function () {
         // Do stuff
      });
    }
  }
});

А затем использовал это в корневом элементе моего приложения, которое может быть, например, body:

<body ng-app="app" my-directive>

Преимущество использования директив таким образом перед сервисами состоит в том, что оно делает его менее глобальным / окончательным. Например, если вы захотите, чтобы некоторые области не смогли $emit события в этот обработчик, то вы можете переместить myDirective к другому элементу. Или, может быть, в будущем вы захотите, чтобы часть вашего приложения реагировала немного иначе myEvent, так что вы можете добавить еще один экземпляр myDirective, возможно, передав ему некоторые параметры через атрибуты. В целом это делает его более открытым для добавления сложного поведения.

Другие вопросы по тегам