使用Angular4我已经为不同的数据库创建了服务。每个数据库的操作都是相同的(有点像CRUD)但具有不同的API端点(但功能完全相同)。
我正在为每个数据库创建一个服务,但我认为必须有更好的方法来管理它。
有没有办法在导入或组件期间将“名称”传递给服务,以便服务知道应该命中哪个端点?
示例:
import {ApiService} from '../_services/api.service.ts';
并在服务中:
let endpoint = enter code here defined from import of component
private url = '/api/' + endpoint
答案 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
访问修饰符。