Angularjs 如何启动独立的角度服务

Angularjs 如何启动独立的角度服务,angularjs,angularjs-service,Angularjs,Angularjs Service,我有一个服务,可以在rootscope上监视某些内容,并做出响应。没有其他人需要该服务作为依赖项。我如何告诉服务开始做它的事情 我现在就是这样做的 angular.module('app') .service('myService', function ($rootScope) { return function () { $rootScope.$on("...", function () { //do stuff }); }; }) .r

我有一个服务,可以在rootscope上监视某些内容,并做出响应。没有其他人需要该服务作为依赖项。我如何告诉服务开始做它的事情

我现在就是这样做的

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

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

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

有没有更干净的方法可以做到这一点?

我已经实现了类似的事情,但使用的是指令,而不是服务:

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
实例,或者通过属性向其传递一些选项。总的来说,这让它更容易添加复杂的行为。

我认为它不会比这更干净……我是OP。现在我已经使用这项自助服务有一段时间了,我建议不要这样做。拥有一个独立的服务可能会干扰其他服务的单元测试。我认为最好有一个
应用程序start.js
,手动启动所有这些服务。该文件将在您的真实应用程序中(
index.html
),但不在您的测试中(
karma.config.js
)。