2013-10-03 54 views
3

我正在開始使用AngularJS,並且我試圖圍繞依賴注入打包頭。 具體來說,我試圖理解DI和聲明與RequireJS的依賴關係的區別。AngularJS中的依賴注入只適用於角度「對象」嗎?

DI在Angular中是否僅適用於在某些angular.module上定義的「對象」(工廠,服務,模型)?例如,我可以依賴一些外部庫,如使用DI的jQuery嗎?

在一般情況下,可以在RequireJS和DI的角度依賴性管理之間的差異這樣註明:

,只有當第一次需要他們(延遲加載)加載依賴RequireJS交易,並確保所有依賴之前存在執行,而角度DI允許在運行時輕鬆更改依賴關係,只要它的界面保持不變?

最後,DI總是通過依賴關係的情況嗎?每次都是新實例還是單身?它可以通過一個「類」定義,我可以實例化自己?例如,如果我需要將選項傳遞給構造函數呢?

回答

9

DI in Angular僅適用於在某些angular.module上定義的「對象」(工廠,服務,模型)嗎?

是。該模塊實際上是一個服務的包裝等。

我可以依賴一些外部庫,如使用DI的jQuery?

是的,我們正在這樣做:myModule.constant("jQuery", window.$)

每次都是新實例還是單身?

總是一個單身人士,除了$scope。此外,控制器總是重新實例化(但控制器功能當然是單身)。

它可以通過一個「類」定義,我可以實例化自己嗎?

是的,當然。剛自定義功能,如返回的構造函數:(編輯:這必須與factory使用;使用service將實例化MyClass和使用實例的服務價值)

factory("Xxx", function(dep1, dep2) { 
    function MyClass() { 
     ... 
    } 

    MyClass.prototype.method = function() ... 

    return MyClass; 
}); 

這是你可以什麼也要使用RequireJS。


至於與RequireJS的區別:有一件事我可以肯定地告訴的是,RequireJS集成的腳本裝載機以及一個DI框架(和優化過)。所以Require(AMD)模塊與腳本文件有1-1關係。另一方面,Angular模塊和服務與文件無關。

除此之外,它們看起來與我相似。