升级到Angular 8后的依赖项注入问题

时间:2019-07-17 12:29:36

标签: angular typescript service angular-services angular-library

我有一个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项目中直接使用它时,它才会出现。

0 个答案:

没有答案