2013-10-13 253 views
1

我是一個angularJS noob在這裏,根據我的理解,有兩個地方我可以注入依賴。AngularJS依賴注入在哪裏指定?

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

}); 

我說得對嗎?如果是這樣,有什麼區別?

+2

'一個地方去做IT'實際上是一個地方添加模塊 – SET

回答

1

在這裏指定「這是一個地方做」實際上是在那裏你可以注入不同的模塊到另一個模塊,下面是一個例子。

var helperModule = angular.module('helperModule', []); 

var pageModule = angular.module('pageModule', ['helperModule']); 

pageModule現在可以訪問所有服務&指令..等連接到helperModule

你在哪裏指定此

function(B: $hereIsAnotherPlace){ ... 

是您注射服務,雖然JavaScript是無效。

以下是可以注入服務的兩種方法。

.controller('myController', function($myService) { ... }); 

或者您可以使用縮小的代碼。

.controller('myController', ['$myService', function($myService) { ... }]); 

在後者的例子,你可以在arguments改變$myService名稱你喜歡什麼。

簡單的例子

.controller('myController', ['$myService', function($thisIsEqualTo$myService) { ... }]); 

所以最後2例的是相同的,當你使用Array指定打針,這個論點可以任意命名,你需要他們的,因爲他們的順序傳遞陣列。

+0

你能詳細說明你的意思嗎?你可以在參數中改變$ myService的名字給你喜歡的任何東西 – denniss

+0

是的,現在更新。 – iConnor

0

A僅在創建模塊時使用,並且只能在您的應用中使用一次。

angular.module('myApp', [A: HERE IS ONE PLACE TO DO IT]); 

B是注入控制器...

angular.module('myApp') 
.controller('HomeController', function(B: $hereIsAnotherPlace){ 

}); 

A的無注入再次否則會創建一個新的模塊,而不是使用您已經創建了一個。

2

在你的例子中,A是你可以指定模塊而不是依賴注入(DI)的地方。下面,地址代碼的這種變化:

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

第二個(B)是必需的,所述第一(A)是任選的(但具有下述好處)。

這裏僅需使用從角文檔第二(B)的例子:

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

但使用Javascript minifiers和混淆器可以重命名參數,並打破這個方法,因爲角度預計,例如,$範圍正好命名爲$ scope(並且限制器喜歡將參數重命名爲儘可能小的部分以縮小文件儘可能小)。

的一種方式,除其他外,周圍是內聯註釋:

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

(再次從角文檔)。這解決了問題,因爲minifers/..不會更改字符串文字。並且角知道將該字符串名稱的服務注入到函數內的匹配參數中。所以參數名稱可以被minifier改成任何東西,並且一切都很好,唯一重要的是服務在字符串/參數列表中的位置(第一個字符串與第一個參數匹配等)。

對於其它更多的依賴注入:http://docs.angularjs.org/guide/di