是否可以在没有模块的情况下创建AngularJS服务?

时间:2013-08-19 15:18:08

标签: angularjs angularjs-service

在AngularJS中有一个简短的表单来创建控制器,因此您不必为此使用模块。这个简短的形式是简单地定义一个函数

function FooController ($scope) {
  // ...
}

并使用ng-controller

从HTML标记中引用它
<div ng-controller="FooController">
  ...
</div>

现在,我的问题是,是否有类似的“简短形式”来定义服务?换句话说:您可以在不使用模块的情况下定义(和使用)服务吗?

请注意,我知道使用模块构建应用程序是完全有意义的,不这样做可能/应该被视为不好的做法。只是我正在向一个对它全新的人解释AngularJS,而今天出现了这个问题。所以这只是为了好奇和完整。

3 个答案:

答案 0 :(得分:7)

引自doc of Creating Services

  

要注册服务,必须拥有此服务所需的模块   成为。

的一部分

所以我猜答案是否定的。

答案 1 :(得分:5)

由于始终会加载ng模块,因此您可以在ng模块上定义服务:

angular.module('ng')
  .service('aService', function () {
    // you really shouldn't do this
  });

它可以工作,但你不应该搞乱你不拥有的模块。

如果你试图向某人解释为什么使用你自己的.controller模块是好的:

  • 与他们谈谈测试。如果您正在使用模块
  • ,那么模拟事物要容易得多
  • 如果您需要将其他模块作为依赖项(例如angular-ui
  • 如果您想装饰其他服务(例如$http
  • 如果您需要注册指令,过滤器,动画等
  • 使用模块化代码要好得多:)

答案 2 :(得分:1)

这是一个我根本不理解的角度概念,我一直认为“分离”是好的,所以我不明白为什么我们需要将服务与指定的应用程序相关联。

我在做什么:您可以将angularjs应用程序声明为全局对象:

window.markrApplication = angular.module('markrOptionsApp', ....)

并宣布您的所有服务:

markrApplication.service('data', ....

当然,您需要在所有angularjs应用程序上设置所有依赖项。