1

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

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

并使用以下 HTML 标记引用它ng-controller

<div ng-controller="FooController">
  ...
</div>

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

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

4

3 回答 3

7

引用自创建服务的文档

要注册服务,您必须拥有该服务所属的模块。

所以我想答案是否定的。

于 2013-08-19T17:07:04.420 回答
5

由于ng模块总是被加载,你可以在ng模块上定义你的服务:

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

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

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

  • 与他们讨论测试。如果您使用模块,那么模拟事物会容易得多
  • 如果您需要其他模块作为依赖项(例如angular-ui
  • 如果你想装饰另一个服务(例如$http
  • 如果需要注册指令、过滤器、动画等。
  • 拥有模块化代码会更好:)
于 2013-08-19T19:04:20.827 回答
1

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

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

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

并像这样声明您的所有服务:

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

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

于 2014-09-07T17:27:01.837 回答