我有一个Angular项目,其中包含一个由Angular CLI生成的Web应用程序和一个库。
为了解释我的问题,我将其分解为使其尽可能简单。假设该库有两个服务,第一个是执行http调用的通用服务:
@Injectable()
export abstract class ApiService {
protected constructor(public httpClient: HttpClient) {
console.log(httpClient);
}
}
第二个服务实际上实现了项目的方法,例如
@Injectable({
providedIn: "root"
})
export abstract class NewsService extends ApiService {
/* THERE IS NO CONSTRUCTOR HERE! */
getNews() { ... }
}
所以直到现在(在Angular 8之前),我都没有从Web应用程序调用{{1}}的问题。从Angular 8开始,我得到一个错误,提示getNews()
。我发现属性ERROR TypeError: Cannot read property 'get' of undefined
永远都没有定义。因此,以上httpClient
中的console.log
打印ApiService
。在Angular 7之前,undefined
类的注入按预期进行。
现在想象一下我按如下方式调整HttpClient
:
NewsService
现在,@Injectable({
providedIn: "root"
})
export abstract class NewsService extends ApiService {
protected constructor(public httpClient: HttpClient) {
super(httpClient);
}
getNews() { ... }
}
在httpClient
的构造函数中不再是未定义的。
根据我的理解,这种行为确实很奇怪。如果我在子类中未提供构造函数,则应改用父构造函数,因此其行为相同。从Angular 8开始,情况就不再如此。
您知道为什么会发生这种情况吗?是否还有其他方法可以解决此问题?
编辑:我必须添加一句话:当我通过NPM在另一个项目中安装库时,不会出现注入问题。仅当我在同一Angular项目中直接使用它时,它才会出现。