angular - 将 HttpClientModule 添加到 Angular 库会引发“NullInjectorError: No provider for Injector”
问题描述
我正在开发一个 Angular 库。我已经像这样设置了库:
ng new mylibrary --create-application false
ng g library mylib
现在,我可以ng build
这样做并创建一个使用它的应用程序,如下所示:
ng new myapp
npm install ../mylibrary/dist/mylib
并添加MylibModule
到imports
我的app.module.ts
这很好用,默认情况下,该库有一个我可以使用的组件。库中还有一个依赖注入服务..也可以正常工作。
现在我想用 http 调用扩展我的库,所以我将 HttpClient 添加HttpClientModule
到我的库模块的导入中,并将 HttpClient 添加到我的服务的构造函数中。ng build
我在我重新运行的应用程序上重建库npm install
..并运行,ng serve
现在我的应用程序抛出:
StaticInjectorError(Platform: core)[HttpHandler -> Injector]:
NullInjectorError: No provider for Injector!
我想我必须以某种方式告诉库使用从应用程序注入的 HttpClient,但是如何?
解决方案
这是因为模块链接。如果您使用“ng server --aot”,您将不会遇到此问题。您可以删除链接并将模块直接复制到 node_modules
打开 C:\Git\NgLibDI\myapp\node_modules 并删除“mylib”链接并手动将 myLib 从 Dist 复制到 myapp 的 node_modules
推荐阅读
- mongodb - MongoDB 拒绝 SSL 连接
- python - 正则表达式匹配“|” 联合类型的分隔值
- android - 如何删除可检查菜单项的结束填充?
- c++ - 基于 CUDA 通道 ID 与 threadIdx.x 的计算
- java - Create a new dataframe (with different schema) from selected information from another dataframe
- node.js - STRIPE - 使用试用创建订阅,试用结束后对 3D 安全卡实施一次性身份验证失败
- linux - 无法使用 Alpine 和 Busybox docker 映像运行可执行文件
- fortran - 我们可以在 Fortran 中修改类型绑定过程的可访问性吗
- javascript - TypeError:无法读取未定义的属性(读取“标题”)
- oauth-2.0 - google oauth 客户端库如何在服务器端打开浏览器进行授权?