Есть ли способ расширить уникальные экземпляры службы в angular? - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть «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, и у меня нет других файлов модулей на данный момент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...