2015-09-07 38 views
0
angular 
    .module('password_forgot', ['app.auth']) 
    .controller('password_forgot', main); 

main.$inject = ['auth']; 

function main(auth) { 
    auth.sendEmail().then(function(){ 
    //blablabla 
    }); 
} 

我應該注射3次MyFactories嗎?這樣做的最佳做法是什麼?注射工廠的最佳做法是什麼?

回答

0

你混淆了三個非常不同的東西:

  • 模塊:這就是各種組件(控制器,服務,指令,過濾器)的註冊。模塊可以依賴於其他模塊。在你的例子中,你正在定義一個名爲'password_forgot'的模塊,它依賴於一個名爲'MyFactories'的模塊。您的應用程序是一個依賴於其他模塊的模塊,這取決於其他模塊等。因此,應用程序是所有模塊中註冊的所有組件的聯合。請注意,工廠不是角度組件。名爲「MyFactories」的模塊可能應該被命名爲「MyServices」。
  • 服務:這是一個可以注入其他角度組件的角度組件。在你的例子中,你正在向控制器'main'注入名爲'MyFactories'的服務。以命名模塊的方式命名服務非常不尋常,也可能是錯誤。你不應該那樣做。 「MyFactories」這個名字對於服務來說是一個非常糟糕的名字。服務應該有一個特定的責任,比如'翻譯','驗證'或'產品'工廠:工廠是一個按照給定名稱(例如'驗證')註冊到模塊中的函數。 ,其責任是創建並返回該名稱服務的唯一實例('身份驗證')。該函數被角度調用一次,返回的對象或函數是注入其他組件的服務。

main.$inject = ['MyFactories', '$scope']; 

如果您壓縮JS代碼纔是必需的。如果你打算這樣做,那麼我建議你避免自己插入這樣的代碼行,並且在縮小之前依靠ng-annotate來修改你的代碼以使其更小。

+0

好吧我更新我的代碼,現在怎麼樣,有權利嗎?是的,我有計劃縮小,如果我在我的根模塊上注入app.auth,怎麼樣?所以我不需要注入password_forgot,這是不好的方式? –

+0

模塊未注入。這是不正確的術語。模塊依賴於其他模塊。這是正確的術語。你的新代碼定義了一個模塊'password_forgot',該模塊依賴於另一個模塊'app.auth',這在發佈的代碼中沒有定義。服務被注入。在您的代碼中,作爲未知模塊一部分的'auth'服務被注入到控制器'main'中,並註冊到模塊'password_forgot'中。這是正確的代碼,假設模塊'app.auth'和服務'auth'在某處定義。 –

+0

但正如我所說的,您應該使用ng-annotate而不是明確定義main。$ inject。 –

相關問題