angular - NullInjectorError: StaticInjectorError(AppModule)[Component-> MatDialogRef]
问题描述
我正在使用一个组件作为通过路由到达的常规组件,但我希望它在使用注入组件时也将其用作模式对话框的“目标”:
export class Component1 implements OnInit {
constructor(private service: <someService>,
public dialogRef: MatDialogRef<Component1>, //These 2 lines are used as
//injection from the opener
@Inject(MAT_DIALOG_DATA) public data: any) {}
这是“开瓶器”的代码:
openComponent1aSModalPage()
{
Const dialogRef = this.dialog.open(Component1, {
width: '70%',
height: '70%',
data: {property: propertyValue}
});
我在激活开启器时工作,但如果我尝试使用常规路由到达同一个组件,我会得到:
错误:未捕获(承诺):NullInjectorError:StaticInjectorError(AppModule)[Component1 -> MatDialogRef]:StaticInjectorError(平台:核心)[Component1-> MatDialogRef]:NullInjectorError:没有MatDialogRef的提供者!
如何调整该组件以在两种模式下工作?
解决方案
我找到了组件中可选注入参数的解决方案:我在构造函数参数之前添加了 @Optional() 装饰器(只有在注册了提供程序时才应该注入)。
constructor(private service: <someService>,
@Optional() public dialogRef: MatDialogRef<Component1>,
@Optional() @Inject(MAT_DIALOG_DATA) public data: any )
我在这里找到了解决方案: 带有可选参数的DI构造函数
推荐阅读
- javascript - URL 中的参数获取树中的第一个子节点,而不是选定的 Javascript
- google-apps-script - 如何使用 Google Apps 脚本将有关频道的所有视频的信息获取到 Google 表格
- android - 一段时间后,前台服务被Android杀死
- python - 如何使用 Matplotlib.basemap 创建表示纬度和经度计算值的彩色地图
- ios - 在 iOS 中播放原始 PCM 数据缓冲区时音频失真
- sql-server - 使用 LIKE 的 SQL 视图?
- pandas - 在 pandas / Python 中更有效地替换特定行的值
- node.js - 如何在 Express 应用程序中通过 SSL 获取 websocket?
- pandas - Python Pandas:如何删除具有特定“对象”数据类型值的行?
- cpu - 如何查看 Boom 的频率?