我正在尝试创建一个类型为string
的构造函数,但我得到的错误为:
不支持此类型作为注入令牌
@Injectable({providedIn: 'root'})
export class DataService {
constructor(url:string, private http:HttpClient) {
}
}
export class PostService extends DataService {
constructor(http:HttpClient) {
super("https://jsonplaceholder.typicode.com/posts",http);
}
}
3条答案
按热度按时间xmd2e60i1#
我相信您遇到的错误是:编译有问题:X
DataService类(由PostService扩展)不应是可注入的。可注入意味着该类(例如DataService)可作为依赖项提供和注入,不应是可注入的,因为其目的是提供形状或可重用服务(以避免在多个服务中编写相同的代码)
解决方案是注解掉DataService中的可注入装饰器
PostService应类似于:
iih3973s2#
问题在于,通过将
DataService
声明为@Injectable
,所有构造函数参数都需要是可注入的,并且没有string
值可注入。另外,相反,如果PostService
没有声明为@Injectable
,则PostService
不会接收httpClient
注入示例。你可能不想在任何地方注入
DataService
,对吗?它的目标是成为一个抽象类,对吗?如果是这样,您应该将具体类声明为
@Injectable
:mzillmmw3#
据我所知,这是行不通的,因为构造函数只是用于依赖注入。
一般来说,我发现在Angular中子类化组件总是相当繁琐和脆弱,所以我会尽量完全避免它。委托/组合而不是继承。([edit]我刚看到这不是关于组件的,抱歉)
无论如何,如果你想坚持扩展,在你的特定情况下,下面的方法可能会起作用:
不要通过构造函数设置属性,而是通过在子类中实现的抽象方法提供属性。