2016-12-23 102 views

回答

2

這是因爲BaseReqestOptions使用@Injectable,這種情況下調用BaseRequestOptions構造函數而不是您的子類構造函數。所以,你既可以:

使用工廠

providers: [{ 
    provide: RequestOptions, 
    deps: [ Config ], 
    useFactory: (config: Config) => { 
    return new DefaultRequestOptions(config); 
    } 
}] 

這將允許你自己創建的服務,而角試圖注入它。或者你可以

擴展RequestOptions代替

@Injectable() 
class DefaultRequestOptions extends RequestOptions { 
    constructor(public config: Config) { 
    super({method: RequestMethod.Get, headers: new Headers()}) 

    this.headers.append('data', this.config.data); 
    } 
} 

RequestOptions不飾@Injectable。如果你看看the source code for BaseRequestOptions,你會發現它所做的與我們上面做的是一樣的(使用super調用)。

我需要在這裏注入我的自定義AuthService也把JWT令牌

你需要的,如果AuthService被注入Http要小心這一點。你可能會得到一個循環依賴錯誤(因爲Http使用RequestOptions和你RequestOptions需要Http)。處理這種情況的一種方法是將Injector,而不是Http注入服務。然後從Injector只需getHttp