1
angular.module('myModule').factory('Foo', ['dependency1', 'dependency2', function(dependency1, dependency2) { 
    class Widget { 
     method() { 
      // <--- we have access to all dependencies here 
     } 
    } 

    return Widget; 
}]); 

據我所知在角2,我們只能訪問在構造函數依賴關係,然後我們應該將它們設置爲每個實例。Angular 2.爲什麼要在每個實例中設置依賴關係?

是否有可能在角2有機會獲得依賴於每一個方法,無需將它們設置爲每個實例?

+0

的問題說您已經閱讀很多關於angular2。重訪依賴注入我是角度文檔有更多的想法 – Aravind

+0

這不是關於angular2它是關於angularjs。如我錯了請糾正我。我已經編輯了標籤 – echonax

+1

@echonax我相信他確實會問angular2。這個例子是在angular1中顯示他希望達到的行爲。 –

回答

0

TL; DR:你已經在使用該模塊級別的依賴關係,在第的形式:

import { OtherService } from './other-service'; 

Angular 1.x小號依賴注入更像是模塊解析器框架。主要的原因是提供模塊處理的方式,因爲當時沒有標準模塊格式(如果有的話)。所以這與JavaEE中的依賴注入並不相同。所以不需要這樣的模塊解析器(我的意思是需要它,但是它被其他工具如SystemJS或Webpack處理)。但是Angular 2Angular 1的弱點,並從其他平臺的優點很多教訓,所以他們推出的實例級別過於依賴注入。

Angular 1考慮這個服務:

app.factory("MyServoce", function(OtherService) { 
    function myAction() {} 
    return { myAction }; 
}); 

這基本上是equvivalent到靜態服務(像在Java中只有靜態方法的類)。一開始沒事,但隨着軟件變得越來越複雜,這是不可取的。另一個類比是單身類。我們程序員正在學習該軟件體系結構的singleton classes are bad。這必定是Angular團隊引入實例級別DI的原因,以幫助我們擺脫靜態服務。