【问题标题】:Adding HttpClientModule to Angular library throws `NullInjectorError: No provider for Injector`将 HttpClientModule 添加到 Angular 库会引发“NullInjectorError: No provider for Injector”
【发布时间】:2019-07-29 14:56:07
【问题描述】:

我正在开发一个 Angular 库。我已经像这样设置了库:

ng new mylibrary --create-application false
ng g library mylib

现在,我可以ng build 这个并创建一个使用它的应用程序,如下所示:

ng new myapp
npm install ../mylibrary/dist/mylib 并将MylibModule 添加到我的app.module.tsimports

这很好用,默认情况下库有一个我可以使用的组件。库中还有一个依赖注入服务..也可以正常工作。

现在我想用 http 调用扩展我的库,所以我将 HttpClientModule 添加到我的库模块的导入中,并将 HttpClient 添加到我的服务的构造函数中。我使用ng build 重建库并在应用程序上重新运行npm install.. 并使用ng serve 运行,现在我的应用程序抛出:

StaticInjectorError(Platform: core)[HttpHandler -> Injector]: NullInjectorError: No provider for Injector!

我想我必须以某种方式告诉库使用从应用程序注入的 HttpClient,但是如何?

编辑 添加仓库:https://github.com/floreseken/NgLibDI

【问题讨论】:

  • 您是否已将 HttpClientModule 添加到主模块的导入列表中?
  • 是的,没有帮助
  • 您的库是否包含任何可注入服务?如果在您的应用程序中是这样,您需要在提供程序下添加这些。由于没有可查看的代码,很难看出问题出在哪里。
  • 试过了。同样的错误。我刚刚添加了一个显示行为的存储库。
  • 顺便说一句.. 该库有一个可注入服务,无需将其添加为提供程序即可正常工作.. 只要我不添加 HttpClientModule

标签: angular typescript


【解决方案1】:

这是因为模块链接。如果您使用“ng server --aot”,您将不会遇到此问题。能不能把链接去掉,直接把模块复制到node_modules里

打开C:\Git\NgLibDI\myapp\node_modules并删除“mylib”链接,手动将myLib从Dist复制到myapp的node_modules

【讨论】:

  • 检查。我还发现在 angular.json 文件中设置“preserveSymlinks”:true 可以修复它。这是我猜的最好的解决方案。
猜你喜欢
  • 2022-12-27
  • 2018-10-14
  • 2020-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-10
  • 2018-08-27
相关资源
最近更新 更多