【问题标题】:How to start a standalone angular service如何启动独立的角度服务
【发布时间】:2014-02-20 11:12:39
【问题描述】:

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

我现在就是这样做的。

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

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

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

有没有更简洁的方法来做到这一点?

【问题讨论】:

  • 我认为没有比这更干净的了...
  • 我是 OP。既然我已经使用这种自启动服务有一段时间了,我建议反对这个想法。拥有自己启动的服务可能会干扰其他服务的单元测试。我认为最好有一个application-start.js,您可以在其中手动启动所有这些服务。该文件将在您的真实应用程序中 (index.html),但不在您的测试中 (karma.config.js)。

标签: angularjs angularjs-service


【解决方案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 的另一个实例,也许通过属性传递一些选项。总的来说,它让添加复杂行为变得更加开放。

【讨论】:

    猜你喜欢
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    • 2014-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    相关资源
    最近更新 更多