我在TypeScript中创建了一个组件库,我想分享许多服务。
export abstract class ComponentBase<T> {
constructor(protected http:Http, protected router: Router, protected route: ActivatedRoute, protected params: Params) {
}
}
问题是我有多个嵌套类型,所以每当我必须在层次结构中派生任何级别时。每个派生类型都会看起来像这样传递基数的注入参数。
import { Http } from '@angular/http';
import { Router, ActivatedRoute, Params } from '@angular/router';
export class SomeDerivedType extends ComponentBase<SomeType> {
constructor(protected http: Http, protected router: Router, protected route: ActivatedRoute, protected params: Params) {
super(http, router, route, params);
}
}
我必须链接我的构造函数以满足基类的构造函数参数。这是非常烦人的开销。因此,我创建了一个Services
类来保存所有封装的依赖项。
import { Injectable } from '@angular/core';
import { Router, ActivatedRoute, Params } from '@angular/router';
import { Http } from "@angular/http";
@Injectable()
export class Services {
constructor(public http:Http, public router: Router, public route: ActivatedRoute, public params: Params) {
}
}
我认为我应该能够将这个服务类注入到组件中,如下所示。
import { Services } from './services'
export class SomeDerivedType extends ComponentBase<any> {
constructor(protected services: Services) {
super(services);
}
}
现在组件库看起来如下:
import { Services } from './services';
import { Http } from '@angular/http';
import { Router, ActivatedRoute, Params } from '@angular/router';
export abstract class ComponentBase<T> {
http: Http;
router: Router;
route: ActivatedRoute;
params: Params;
constructor(protected services: Services ) {
this.http = services.http;
this.route = services.route;
this.router = services.router;
this.params = services.params;
}
}
遗憾的是,这对我不起作用,而是出现以下错误:
(index):63错误:错误:无法解析服务的所有参数: ([object Object],[object Object],[object Object],?)。
所以,自然我的问题是,“有没有办法让依赖服务(即http,路由器,路由和参数服务)注入我的服务类?”
答案 0 :(得分:1)
好吧,事实证明我错过了一些关于棱角分明的东西,这对我来说并不清楚。我只使用了一段时间。问题实际上很简单。 Params不是一项服务。
(index):63错误:错误:无法解析服务的所有参数:([object Object],[object Object],[object Object] ,?)。
这条消息让我失望,因为它说不能解决所有问题。我误解了它,因为它确实告诉我其中一个参数没有得到解决。在我的案例中受保护的params:Params。
此代码现在可以正常工作,就像我希望删除params项一样。