2013-08-22 92 views
2

通過閱讀網絡上的各種教程,我遇到了兩種不同的註冊控制器的方法。角度控制器顯式依賴注入

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

//without explicit dependency injection 
app.controller ("myCtrl1", function ($scope, $http) { 
     //some implementation 
}); 

//with explicit dependency injection 
app.controller ("myCtrl2", ["$scope", "$http", function ($scope, $http) { 
     //some implementation 
}]); 

這兩個似乎工作與$ scope和$ http對象可用於功能內部的平等。

有人能夠啓發我兩種方法之間的不同,如果一個人比另一個更優先?如果角能夠找出要注入的正確依賴關係,那麼明確聲明它的好處是什麼?

+0

縮小容差。 http://docs.angularjs.org/tutorial/step_05 – zsong

回答

3

的問題是縮小:

//without explicit dependency injection 
a.controller ("myCtrl1", function (b, c) { 
     // Broken because toString here returns 
     // a, b - which are not dependencies that 
     // Angular knows how to resolve 
}); 

//with explicit dependency injection 
a.controller ("myCtrl2", ["$scope", "$http", function (b, c) { 
     // b and c are properly resolved 
}]); 
+0

我有一種感覺,這個故事更多。由於隱式形式似乎在'net'的例子中很普遍,並且從yeoman生成的代碼,並且由於每個人都縮小了他們的Javascript,是否還有另一種解決這個問題的方法? – skagedal

+0

啊,是的。人們使用工具來添加顯式的依賴關係。例如,Grunt任務'grunt-ng-annotate'用於Yeoman腳手架Angular項目中。 https://github.com/mzgol/grunt-ng-annotate – skagedal

1

的主要區別在於,有明確依賴注入,依賴關係是不是基於參數的名稱,但您傳遞的字符串中。這使您可以無風險地使用JavaScript縮小器,因爲它們會重新命名參數。

+0

謝謝,我剛用uglifyjs使用webpack時遇到了一個問題 – Allen