У меня есть «dataService», который обрабатывает функции CRUD для моих таблиц в базе данных. Теперь у меня есть и другие сервисы, которые я хочу использовать этот dataService, так как единственное, что действительно меняется, - это имя таблицы в БД. Вот как выглядит мой dataService:
import { Injectable } from '@angular/core';
import {DataService} from './data.service';
import {BaseService} from './base.service';
let self;
@Injectable()
export class DataModelService {
tableName;
constructor(private data: DataService,
private base: BaseService) {
self = this;
}
items: any;
load(criteria: any) {
let whereClause = criteria;
if (!this.base.isNotEmpty(whereClause) || criteria === {}) {
whereClause = null;
}
return new Promise(((resolve, reject) => {
this.data.load(self.tableName, 0, whereClause).subscribe(
(value: any) => {
this.items = value;
resolve(value);
}
);
}));
}
}
А вот пример других сервисов, расширяющих этот сервис
Торговый сервис:
import { Injectable } from '@angular/core';
import { BaseService } from './base.service';
import { DataService } from './data.service';
import { DataModelService } from './dataModel.service';
let self;
@Injectable()
export class TradeService extends DataModelService {
constructor(private dataService: DataService,
private baseService: BaseService) {
super(dataService, baseService);
self = this;
self.tableName = 'trades';
}
}
Служба товарных позиций:
import { Injectable } from '@angular/core';
import { BaseService } from './base.service';
import { DataService } from './data.service';
import { DataModelService } from './dataModel.service';
let self;
@Injectable()
export class TradeItemService extends DataModelService {
constructor(private dataService: DataService,
private baseService: BaseService) {
super(dataService, baseService);
self = this;
self.tableName = 'tradeItems';
}
}
Я использую оба этих торговых сервиса в одном компоненте. Проблема в том, что когда я использую сервис торговли (первый сервис), он использует 'tradeItems' в качестве имени таблицы. Я предполагаю, что торговый сервис сначала использует сервис данных, а затем второй сервис tradeItems, который устанавливает переменную tableName в значение tradeItems.
Так есть ли способ позволить двум торговым сервисам использовать уникальные экземпляры DataModelService ? Я предоставляю торговые услуги в файле app.module.ts, и у меня нет других файлов модулей на данный момент.