angular - NullInjectorError : StaticInjectorError(AppModule)[Component-> MatDialogRef]

标签 angular typescript dependency-injection modal-dialog angular-material

我正在使用一个组件作为通过路由到达的常规组件,但我希望它在使用注入(inject)组件时也将其用作模式对话框的“目标”:

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}
 });

我在激活开启器时工作,但如果我尝试使用常规路由到达同一个组件,我会得到:

Error: Uncaught (in promise): NullInjectorError: StaticInjectorError(AppModule)[Component1 -> MatDialogRef]: StaticInjectorError(Platform: core)[Component1-> MatDialogRef]: NullInjectorError: No provider for MatDialogRef!



如何调整该组件以在两种模式下工作?

最佳答案

我找到了组件中可选注入(inject)参数的解决方案:
我在构造函数参数之前添加了 @Optional() 装饰器(只有在注册了提供程序时才应该注入(inject))。

constructor(private service: <someService>,
@Optional() public dialogRef: MatDialogRef<Component1>,
@Optional() @Inject(MAT_DIALOG_DATA) public data: any )

我在这里找到了解决方案:
DI constructor with optional parameters

关于angular - NullInjectorError : StaticInjectorError(AppModule)[Component-> MatDialogRef],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57258884/

相关文章:

Angular 9,@ContentChildren 未正确初始化

c# - 内置类型的依赖注入(inject)

java - Spring 自动接线

css 涂鸦抛出 Angular 错误?

javascript - 如何检查数组中的id是否出现在另一个数组中,然后将其推送到新数组

javascript - Angular:使用 NgIf 删除组件、内部表单和元素?

c# - asp.net core依赖注入(inject)中注册类型时如何处理混合构造函数参数

javascript - 为什么我的图像不显示在 angular 2/4 css 上?

angular - 如何在 Electron 应用程序外部复制和粘贴?

typescript - 当应用程序在 Angular 2 中启动时如何运行服务