2015-11-04 63 views
2

爲什麼角注射語法是這樣的:角度注入語法背後的想法是什麼?

angular.module('myApp.services', []) 
    .factory('someService', ['$http', function($http) { 
... 
}]); 

,不喜歡這樣的例子:

angular.module('myApp.services', []) 
    .factory('someService', function($http) { 
... 
}); 

它看起來像解釋器將在這兩種情況下相同的信息。但在第二個複雜程度較低。

+0

Javascript最小化結果是第二種語法中的信息丟失。 –

回答

2

當您最小化當前文件時,第一種方法有用。由於注入器按名稱查找模塊,因此需要保持模塊名稱不被最小化。所以,當你不會最小化你的文件時,你可以使用第二種方法。

1

無論何時javascript代碼是obfuscatedminified那麼所有在方法中傳遞或在方法中聲明的變量在未知字母中發生變化。但angular需要使用像$http這樣的實際名稱來查找它們,因此我們不需要更改模塊的確切名稱,而是使用角度短符號語法創建不同名稱的副本。

angular.module('myApp.services', []) 
    .factory('someService', function($http) { 
    var item,name; 
}); 

混淆後。

angular.module('myApp.services', []) 
    .factory('someService', function(a) { 
    var b,c; 
}); 

但是,當代碼被寫入角短符號就會像。

angular.module('myApp.services', []) 
.factory('someService', ['$http',function(a) { 
    var b,c; 
}); 

這裏「$ HTTP」將不會改變,因爲它是一個字符串值,它根本不模糊的時間隱蔽性。 現在角度知道函數中傳遞的變量'a'是$http service.