2014-04-09 35 views
1

我對AngularJS是一種新手。在AngularJS的模塊中的Controller中傳遞範圍參數

在關於如何使用AngularJS模塊文本我碰到下面的代碼

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

myApp.controller('MainCtrl', ['$scope', function ($scope) { 

    $scope.text = 'Hello, Angular fanatic.'; 

來到我們定義一個模塊,這種情況下。我得到的模塊是一種避免全局變量的方法,它們在rootcope中定義了一個範圍,並充當控制器和其他對象的容器。

在myApp.controller(..)行中,我們傳遞$ scope對象,並且還使用$ scope對象傳遞一個函數對象。我不知道爲什麼需要傳遞$ scope參數。爲什麼直接使用$ scope變量而不將它注入控制器是不可能的,我猜是數組中的第一個變量在做什麼。

當在ng-controller標籤中使用控制器時,我猜想$ scope會自動創建並追加。在這種情況下,通過$ scope不是多餘的。

回答

3

不強制傳遞$範圍參數數組中,你可以做如下:

myApp.controller('MainCtrl', function ($scope) { 

//Your code here 

}); 

如果我沒有得到你的意思,不是讓我知道,我會解釋這對你來說更是如此!

1

您實際上沒有通過$scope對象作爲第一件事,您聲明您的代碼取決於對角度DI系統的$scope對象。省略它具有相同的結果,但在縮小時它不起作用,這就是爲什麼數組語法首選縮小。

0

如在AngularJs documentation for controllers中所見,您可以使用更簡單的方式在您的應用中設置您的控制器。你的例子也可以這樣寫:

myApp.controller('MainCtrl', function ($scope) { 

    $scope.text = 'Hello, Angular fanatic.'; 

} 

更多,角度爲您提供了possibilty注入大量的事情控制器的參數在你想要的順序。所以這也可以輸入:

myApp.controller('MainCtrl', function (customService1, customService2, $scope) { 

    $scope.text = 'Hello, Angular fanatic.'; 

} 

而$ scope變量將始終設置正確。

聲明控制器的「數組」方式用於避免在縮小角度腳本時發生問題,導致縮略詞在'a'類中轉換'$ scope',那麼Angular解析將失敗。

所以,你有兩種解決方案:

  • 寫的「陣」符號的控制器,如果你想與普通minifiers來縮小你的腳本。

  • 與「簡單」的符號寫你自己的控制器,如果你,如果你使用ng-min或類似的東西(我推薦這種方式),不運行如下腳本
1

我也是AngularJS的新手,但我相信我可以部分回答你的問題。

(1):數組中的第一個變量爲函數中的第一個參數分配一個名稱。這是縮小所必需的。請參閱「關於縮小的注意事項」:http://docs.angularjs.org/tutorial/step_05

(2):我不是100%確定的,但我猜想函數簽名中的$範圍是依賴注入的AngularJS方法的一部分。在這種情況下,它使用基於構造函數的依賴注入。

請記住,有樹種依賴注入:構造函數注入,設置注入,接口注入。