我正在使用一个组件作为通过路由到达的常规组件,但我希望它在使用注入(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/