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