javascript - AngularJS Dependency Injection 在哪里指定?

标签 javascript angularjs

我是一个 angularJS 菜鸟,根据我的理解,我可以在两个地方注入(inject)依赖。

angular.module('myApp', [A: HERE IS ONE PLACE TO DO IT])
.controller('HomeController', function(B: $hereIsAnotherPlace){

});

我说得对吗?如果是,有什么区别?

最佳答案

在您的示例中,A 是您可以指定模块而不是依赖注入(inject) (DI) 的地方。下面,解决您的代码的这种变化:

 .controller('HomeController', [A , function(B) {}]);

第二个 (B) 是必需的,第一个 (A) 是可选的(但具有如下所述的好处)。

这是一个仅使用 Angular 文档中的第二个 (B) 的示例:

    function MyController($scope, greeter) {...}'

但是 Javascript 压缩器和混淆器可以重命名参数并打破这种方法,因为 Angular 期望,例如,$scope 被精确命名为 $scope(并且压缩器喜欢将参数重命名为尽可能小的东西,以便将文件缩小为尽可能小)。

其中一种方法是内联注释:

someModule.factory('greeter', ['$window', function(renamed$window) {...}]); 

(再次来自 Angular 文档)。这解决了这个问题,因为 minifers/.. 不会更改字符串文字。 Angular 知道将具有该字符串名称的服务注入(inject)到函数内的匹配参数中。因此参数名称可以通过缩小器更改为任何内容,一切都很好,唯一重要的是服务在字符串/参数列表中的位置(第一个字符串与第一个参数匹配,等等)。

有关依赖注入(inject)的更多信息:http://docs.angularjs.org/guide/di

关于javascript - AngularJS Dependency Injection 在哪里指定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19351097/

相关文章:

javascript - 如何访问在 JS 中的另一个 <script> 标签上导入的变量

javascript - Restagonal Promise then 功能的范围

html - 如何缩小响应式网站?

javascript - Angularjs - 我如何访问 Controller 中的指令属性

javascript - ngMeta注入(inject)错误

javascript - Angular $http 附加数据作为对象

javascript - "Add"删除行后按钮停止工作

javascript - mootools 排序列表

javascript - 如何将 JavaScript 数组传递给 DataTable() 中的函数

javascript - 使用 HTML 音频标签播放二进制字符串