以编程方式将类型传递给服务的最佳方法是什么?

时间:2017-09-29 22:05:31

标签: angular typescript angular-cli

使用Angular4我已经为不同的数据库创建了服务。每个数据库的操作都是相同的(有点像CRUD)但具有不同的API端点(但功能完全相同)。

我正在为每个数据库创建一个服务,但我认为必须有更好的方法来管理它。

有没有办法在导入或组件期间将“名称”传递给服务,以便服务知道应该命中哪个端点?

示例:

import {ApiService} from '../_services/api.service.ts';

并在服务中:

let endpoint = enter code here defined from import of component  
private url = '/api/' + endpoint

1 个答案:

答案 0 :(得分:1)

这样的东西
@Injectable()
abstract class ApiService {
  protected endpoint;

  protected get url() {
    return '/api/' + this.endpoint;
  }

  constructor(protected http: Http) {}

  getItems() {
     return this.http(this.url);
  }
}

class SomeService extends ApiService {
  protected endpoint = 'some';
}

请注意,endpoint被定义为字段,url是只读访问者,这允许在子类中维护正确的顺序。

WETter版本(也允许子类注入其他依赖项)是:

@Injectable()
abstract class ApiService {
  constructor(protected http: Http) {}
  ...      
}

@Injectable()
class SomeService extends ApiService {
  constructor(http: Http /*,  protected some: Some */) {
    super(http);
  }
  ...
}

如果父类和子类中都存在相同的依赖关系,则它应仅在父类中具有protected访问修饰符。