【问题标题】:When to specify angularjs dependency modules?何时指定 angularjs 依赖模块?
【发布时间】:2015-06-06 22:01:48
【问题描述】:

我见过一些可以立即在提供程序中使用 Angular 服务的实例,例如:

.module('yea.buddy', [
    'ui-translate'
])
.config(function($translateProvider) { ... })

.module('yea.buddy.two', [
    'some-module'
])
.config(['some-module-service', function(someModuleService) { ... }])

这两者有什么区别?什么时候隐含资源,不需要方括号符号?

编辑:我有一个实例有些混乱,我问是因为我不想破坏缩小。

【问题讨论】:

标签: angularjs dependency-injection angularjs-module


【解决方案1】:
  1. 在模块中,例如 angular.module('app',[]);方括号用于依赖模块。如果您有任何依赖项必须包括在此处,则这是强制性的,无论您是否要缩小。

  2. 要创建任何控制器、服务、指令和过滤器,如果要缩小,您必须提供各自的依赖关系。如果你不想缩小它是可选的

  3. 在 angular.module('app',[]).config() 的情况下,它与第 2 项相同,这意味着如果您不打算缩小它是可选的

奖励:

为什么需要 Angular?

让我们试着了解角度如何从函数参数中检测依赖关系。参数的顺序是无用的。如果您可以更改任何参数的顺序,它将毫无问题地工作。实际上,角度维护一个全局数组 $injector ,它在其中存储每个实例,其中数组索引(对象属性)是您在创建服务或过滤器或任何其他组件时提供的名称。例如你创建了一个服务

  angular.module('app',[]).service('good', function(){

  });

那么有棱有角

$injector['good'] = service/filter etc output 

好的,让我们回到主题。因此,当您可以尝试将新创建的服务“好”作为参数注入控制器时,角度首先找出所有提供的参数并从 $injector[EACH_SINGLE_ARUGMENT] 恢复其实例,即针对您的情况 $injector['good']

但是当您缩小代码时,大多数情况下它会缩小函数参数。例如, 'good' 将是 'a' 。结果 angular 无法检测到。这就是为什么 angular 使用这个技巧,所以当你在方括号中提供你的依赖时,例如

app.controller(['good', function(good) {
 }] );

angular 使用此数组的名称,因为 minify 脚本不会更改数组值。因为缩小脚本通常会执行以下操作:

  app.controller(['good', function(a) {
   }] );

希望对你有所帮助。

【讨论】:

    猜你喜欢
    • 2014-04-28
    • 2014-11-24
    • 1970-01-01
    • 1970-01-01
    • 2015-10-06
    • 2019-02-20
    • 1970-01-01
    • 2015-08-03
    • 2019-01-11
    相关资源
    最近更新 更多