2016-06-13 44 views
0

基本上我不知道什麼是宣稱這種做法之間我控制器之間的區別:問:爲什麼在角度控制器中使用依賴注入?

myApp.controller('GreetingController', ['$scope', function($scope) { 
    $scope.greeting = 'Hola!'; 
}]); 

這:

myApp.controller('GreetingController', function($scope) { 
    $scope.greeting = 'Hola!'; 
}]); 

據我所知,在角控制器/指令/過濾等聲明括號是依賴注入的,但是使用Controller的$ scope只能用於控制器。至少這是我的理解。

請幫我理解一下,我一直在研究這個問題,而且很多關於此事的解釋都可以在網上找到。

在此先感謝。

+0

我想你缺少的是這兩個例子都使用依賴注入!第二個示例明確定義了正在注入的服務的名稱('$ scope')。 – Ignitor

回答

2

在第二個版本中,依賴注入將僅依賴於$scope變量名稱。由於它將在縮小過程中重命名,因此這將不再適用。

對這個問題的更多細節:Angularjs minify best practice

1

之前在服務器上部署的代碼,我們用它來構建它,並在此過程中的代碼得到縮小和醜化,而加工生成角的代碼以這樣的方式得到壓縮它簡而言之取代了長變量名稱。 例如。

myApp.controller('GreetingController', ['$scope','myService', function($scope,m) { 
    $scope.greeting = 'Hola!'; 
}]); 

當代碼獲得精縮,它可能會改變

myApp.controller('GreetingController', ['$s', 'm', function($scope,m) { 
    $scope.greeting = 'Hola!'; 
}]); 

它表示$ S作爲depedency是什麼功能可按的第一個參數。 amd m是第二個函數參數。

一定要記住按照與傳遞參數相同的順序進行注入。

希望這個答案可能會給你一些想法。

+1

你的回答幾乎是正確的,但你有錯誤的方式 - 參數名稱被縮小,但數組中的字符串不會!它看起來更像'['$ scope','myService',函數($ s,m){...}]'。 –

+1

@JoeClay:是的,我錯過了那個錯字。 – amoeba