2016-02-05 75 views
1

經過一天的搜索沒有發現我在找什麼!全球/常見方法常數服務貫穿整個應用程序angular2

我有一些方法(也可以說服務),我已經寫在單獨的文件,然後我必須在整個angular2應用程序中使用這些方法。我知道如果我們在引導時導入該文件,我們可以在整個應用程序中使用這些方法。但我的問題是如果我必須有兩個以上的全局文件。我應該不得不導入每個組件的構造函數中的所有文件(需要哪些組件服務)?或者是否有其他替代方案?

,比如我有文件名爲GlobalService.ts。

export clas xyz{ 
constructor(private base_path_service: GlobalService){ 
    //stuff... 
    } 
} 

Q1: - 是否有任何替代方法避免每次在構造函數中初始化GlobalService?

Q2: - 什麼用@injectable的benifit和@inject而服務注入?

Q3: -

export clas xyz{ 
constructor(private base_path_service: GlobalService){ 
    //stuff... 
    } 
} 

class xyz{ 
    constructor(@Inject(GlobalService) GlobalService: globalService) { 
     //stuff.... 
    } 
} 

哪一個是最好的,爲什麼?

回答

0

Q1:沒有理智的選擇。

Q2:@Injectable()已被添加到具有構造函數的參數,否則Angulars DI不能創建實例服務。

@Inject(GlobalService)是多餘的。有特殊的功能,其中@Inject()有利於像這裏顯示https://stackoverflow.com/a/35217704/217408

Q3:第一個例子。見Q2。

+0

但我不想把我的全局服務放入要使用該服務的組件的構造函數那麼什麼? –

+0

我可能誤解了「導入每個組件的構造函數中的所有文件」中的「導入」。你可以做的是創建一個像你所提到的服務('globalService'),它提供對所有其他服務的訪問。這樣你只需要在構造函數中注入這一個服務(仍然在任何地方)並調用像this.globalService.specialService.doSomething()這樣的函數。沒有可行的其他方式來獲取全局實例,而不是通過構造函數。這有什麼問題? –