【问题标题】:Is it possible to create an AngularJS service without a module?是否可以在没有模块的情况下创建 AngularJS 服务?
【发布时间】:2013-08-21 11:02:09
【问题描述】:

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

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

并使用ng-controller从 HTML 标记中引用它:

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

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

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

【问题讨论】:

  • 引用自文档To register a service, you must have a module that this service will be part of.,所以我猜答案是否定的。
  • 如果你把它变成一个答案并提供一个链接,我会接受它。

标签: angularjs angularjs-service


【解决方案1】:

引自doc of Creating Services

要注册服务,您必须拥有该服务将使用的模块 成为其中的一员。

所以我想答案是否定的。

【讨论】:

  • 不正确。见下文。您不需要模块,因为您可以使用“ng”模块。
【解决方案2】:

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

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

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

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

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

【讨论】:

    【解决方案3】:

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

    这就是我正在做的事情:你可以将你的 angularjs 应用程序声明为一个全局对象:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-06-25
      • 2014-06-16
      • 2018-09-21
      • 2012-01-08
      • 1970-01-01
      • 2019-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多