I think the best approach to achieving your goal is to use interfaces and a service provider. I hope the following sample code can point you in the right direction:
data tables.service-interface.ts
export interface DataTablesServiceInterface {
getHeaders(): Promise<any[]>;
getData(query?: string, offset?: number, size?: number): Promise<any>;
}
data 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
]
};
mock- , angular -cli, environment.
Edit:
, . dataTablesServiceProvider . , , DI .
:
constructor(@Inject(dataTablesToken) private dataTablesService: DataTablesServiceInterface)
, Angular