最近我一直在做一些角度的工作,並且我注意到可以省略控制器函數中依賴項的名稱數組。如果你這樣做,控制器仍然可以正常工作,並且依賴性被注入得很好。角度和控制器功能參數
我確定我錯過了一些東西。這些名字的原因是什麼?
最近我一直在做一些角度的工作,並且我注意到可以省略控制器函數中依賴項的名稱數組。如果你這樣做,控制器仍然可以正常工作,並且依賴性被注入得很好。角度和控制器功能參數
我確定我錯過了一些東西。這些名字的原因是什麼?
見第一個在https://docs.angularjs.org/tutorial/step_05
它是用來minifications後,讓您的依賴注射的字符串參考「上微小注意」:
由於角從名稱推斷控制器的依賴 參數給控制器的構造函數,如果你想要 縮小PhoneListCtrl控制器的JavaScript代碼,所有的 函數參數也會被縮小,並且依賴關係 注入器會n無法正確識別服務。
控制器是可調用的,它們的參數必須注入現有/有效/註冊的依賴關係。角採取三種方式:
如果通過控制器(這也適用於供應商)是一個數組,最後一個項目是控制器,前者的項目預計將與依賴注入名稱的字符串。名字數和名字必須匹配。
//parameter names are what I want.
c = mymodule.controller('MyController', ['$scope', '$http', function($s, $h) {}]);
否則,如果通過控制器具有$inject
性質,預期這樣的屬性是一個字符串作爲依賴關係的名稱的數組。數組的長度和長度必須匹配。
con = function($s, $h) {};
con.$inject = ['$scope', '$http'];
c = mymodule.controller('MyController', conn);
否則,名字注入的陣列從參數列表中獲取,所以他們必須相應命名。
c = mymodule.controller('MyController', function($scope, $http) {});
//one type, one minification, and you're screwed
你應該從未想到的是,控制器工作,如果你不明確設置-explicitly-的依賴關係的名字注入。這是一個不好的實踐因爲:
意見建議:總是使用明確的符號(方式1或2)。哈哈!
哈!我知道我錯過了一些東西。這是否也意味着我不應該在自己的陣列中列出自己的工廠?因爲他們的名字將會改變。 – Omar 2014-08-29 14:38:32
我可以添加,你應該:1)總是使用這個雙重符號或2)使用一個工具,自動爲你添加它像https://github.com/alexgorbatchev/grunt-angular-injector,因爲你一定會需要minifuication在某一點;) – 2014-08-29 14:41:29
@CarlosBlanco要回答你的問題:是的,你muwt使用雙重符號的角核心依賴或你的。縮小後,變量名稱將被縮小,但由於「字符串」符號,它將指向良好的依賴關係 – 2014-09-01 07:05:41