何时指定angularjs依赖模块?

时间:2015-04-02 03:46:14

标签: angularjs dependency-injection angularjs-module

我已经看到了一些可以立即在提供商中使用角度服务的情况,例如:

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

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

两者之间的区别是什么?什么时候隐含资源,不需要方括号表示法?

编辑:我有一个存在混淆的实例,我问,因为我不想打破缩小。

1 个答案:

答案 0 :(得分:0)

  1. 在模块中,例如angular.module(' app',[]);方括号用于依赖模块。如果您有任何依赖性,这是强制性的,无论您是否要缩小,都必须包括在内。

  2. 要创建任何控制器,服务,指令和过滤器,您必须提供相应的依赖性(如果要缩小)。如果你不想缩小它是可选的

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

  4. <强>加成:

    为什么Angular需要?

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

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

    如此棱角分明

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

    好的,回到主题。因此,当您可以尝试注入新创建的服务时,那就是“好”。在作为参数的控制器中,angular首先查找所有提供的参数并从$ injector [EACH_SINGLE_ARUGMENT]恢复其实例,即为您的案例$ injector [&#39; good&#39;]

    但是当你缩小你的代码时,大多数时候它会缩小函数参数。例如,&#39; good&#39;将是&#39; a&#39; 。结果,角度无法检测到。这就是为什么角度使用这个技巧所以当你提供方形支撑的依赖性时,例如

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

    angular从此数组中获取名称,因为minify脚本不会更改数组值。因为minify脚本通常会执行以下操作:

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

    希望你能帮到你一点。