2017-04-25 62 views
0

我正在開發一個具有一些自注冊組件的AngularJS應用程序。具體而言,這些服務不直接提供任何公共接口;他們只是在一些其他服務提供的目錄中註冊一些內部對象。什麼是注入/加載自助註冊服務的正確位置?

你可以想象一下身體這樣的服務的工廠如下:

var internalThing = { 
    // members ... 
}; 
thingRegistryService.registerThing(internalThing); 

return {}; 

因此,我只需要確保該服務被在某一點加載。

我可以注入服務通常在某些服務或控制器,我知道會得到加載 - 但是,我基本上在代碼中留下一個未使用的參數(如果它是列表中的最後一個參數,甚至會根據項目的JSHint設置被列爲錯誤)。


有點背景:這是一個大團隊開發的大型項目的一部分。構建和/或部署魔術以某種方式處理由任何開發人員提交給我們VCS的任何JavaScript代碼文件都可用於AngularJS的依賴注入。因此,需要添加任何JavaScript有作爲某種一個AngularJS服務,控制器來提供,等等


什麼是加載這樣的自注冊服務的正確方法?

回答

0

正確的位置初始化您的模塊是angular.module('yourModule').run塊。

在的情況下,「自注冊」我認爲這是最好有一些這方面的隱式方法:

angular.module('yourModule').run(['service'], function (service) { 
    service.init(); 
}) 
+0

這聽起來像一個很好的答案。我只有一個問題:「我認爲最好有一些隱含的方法」 - 爲什麼?當然,它抑制了JSHint消息,但除此之外,它似乎是多餘的(自注冊服務已經被注入的事實已經「需要」),甚至可能有輕微的危害(如果服務是由各種模塊,並且應該在第一次加載時註冊,無論哪個模塊,明確的init()調用都要求我添加自定義邏輯以確保初始化只發生一次,這將自動成爲... –

+0

..注入懶惰實例化的單例服務)。 –