Как начать автономный угловой сервис
У меня есть служба, которая наблюдает за чем-то в корневом каталоге и что-то делает в ответ. Никто другой не требует эту услугу в качестве зависимости. Как мне сказать службе начать делать свое дело?
Вот как я делаю это сейчас.
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
, возможно, передав ему некоторые параметры через атрибуты. В целом это делает его более открытым для добавления сложного поведения.