我認爲實現您的目標的最佳方法是使用接口和服務提供者。我希望下面的代碼示例可以爲您指出正確的方向:
數據tables.service-interface.ts
export interface DataTablesServiceInterface {
getHeaders(): Promise<any[]>;
getData(query?: string, offset?: number, size?: number): Promise<any>;
}
數據tables.service-provider.ts
import { Http } from '@angular/http';
import { OpaqueToken } from '@angular/core';
import { DataTablesServiceInterface } from './data-tables.service-interface';
import { DataTablesService } from './data-tables.service';
import { DataTablesMockService } from './data-tables.mock-service';
import { environment } from '../../../environments/environment';
let dataTablesServiceFactory = (http: Http) => {
var serviceToReturn: DataTablesServiceInterface;
if (environment.production) {
serviceToReturn = new DataTablesService(http);
} else {
serviceToReturn = new DataTablesMockService();
}
return serviceToReturn;
};
export let dataTablesToken = new OpaqueToken('DataTablesServiceInterface');
export let dataTablesServiceProvider =
{
provide: dataTablesToken,
useFactory: dataTablesServiceFactory,
deps: [
Http
]
};
你只需要實現實際和模擬服務,並且可以根據已經在angular-cli中實現的嵌入配置文件機制使用environment
。
編輯: 還有一些我忘了提及的信息。在您的責任模塊中,您需要聲明dataTablesServiceProvider
作爲提供者。在你想使用服務的組件中,DI的方法與標準方法略有不同。
在組件的構造函數,你寫:
constructor(@Inject(dataTablesToken) private dataTablesService: DataTablesServiceInterface)
如果你有興趣在不透明的令牌,我建議看看Opaque Token by Angular