我有三个类(class):
@Injectable()
export class ApiService {
constructor(public http: Http) {}
get(url: string) {
return http.get(url);
}
}
@Injectable()
export abstract class BaseService {
constructor(protected serv: ApiService) {}
}
@Injectable()
export class MediaService extends BaseService {
// Why do we need this?
constructor(s: ApiService) {
super(s)
}
makeCall() {
this.serv.get("http://www.example.com/get_data")
}
}
在 Angular2 中,即使 MediaService 继承了 BaseService,我也必须包括 BaseService 和 MediaService 的构造函数。
如何将 Angular2 注入(inject)到 BaseService 中而不在 MediaService 的构造函数中注入(inject)它?
现在我拥有了所有继承自 BaseService 的类,这些类根据 ApiService 扩展 BaseService。
最佳答案
如果你想通过 DI 传入它,你必须使用构造函数。构造函数不是继承的,因此您需要在每个子类中实现构造函数,并通过调用 super(arguments)
将参数传递给父类(super class)构造函数。
唯一的异常(exception)是没有任何自动生成的参数的默认构造函数。
您可以做的是注入(inject) Injector
并将其转发给父类(super class),父类(super class)从 Injector
命令式请求 Http
。如果您注入(inject)多个服务,这可能有点优势,因为您只需要声明一个构造函数参数,但在我看来,这使得对代码进行推理变得更加困难。
关于typescript - Angular2 访问全局服务而不将其包含在每个构造函数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35206821/