如何以正常方式和角度材质对话框使用相同的组件?

Viv*_*mar 3 angular

我有一个要从 2 个地方使用的组件

  1. 通常,在某些模板中包含选择器,例如<comp-a></comp-a>.
  2. 角度材质对话框内部。

当使用具有角度材质对话框的相同组件时,我必须注入以下依赖项

  constructor(
    public dialogRef: MatDialogRef<CTConfigurationComponent>,
    @Inject(MAT_DIALOG_DATA) public dialogData: any,
  ) {}
Run Code Online (Sandbox Code Playgroud)

它在案例 2 中工作正常,但案例 1 因以下错误而中断 在此处输入图片说明

尝试使用@Optional()@Skip()但没有成功。

问题 -1 : 1. 是否可以告诉 angular DI 跳过一些依赖项?

尝试过public injector: @Injector,并在构造函数调用中

this.dialogRef = this.injector.get(MatDialogRef<CTConfigurationComponent>);

Run Code Online (Sandbox Code Playgroud)

也不工作。


编辑-1:

(method) Injector.get(token: any, notFoundValue?: any)
Run Code Online (Sandbox Code Playgroud)

问题2:

有没有像任何类似的事情notFoundValueInjector.get时候,我们是通过构造函数做DI?

任何建议或解释都会有所帮助

Viv*_*mar 12

在尝试了很多事情之后,我找到了解决此错误的方法。在此处发布解决方案,以便对其他人有所帮助

所以而不是这个

  constructor(
    public dialogRef: MatDialogRef<CTConfigurationComponent>,
    @Inject(MAT_DIALOG_DATA) public dialogData: any
  ) {}
Run Code Online (Sandbox Code Playgroud)

我正在使用下面的代码

  private dialogRef = null;
  private  dialogData;
  constructor(private injector: Injector) {
      this.dialogRef = this.injector.get(MatDialogRef, null);
      this.dialogData = this.injector.get(MAT_DIALOG_DATA, null);
  }
Run Code Online (Sandbox Code Playgroud)


asi*_*hmi 1

在您的app.module.ts中,您需要导入MatDialogModule然后将其添加到您的imports属性中

应用程序模块.ts

import {MatDialogModule} from "@angular/material";

@NgModule({ 
  declarations: [CTOnboardingComponent, CTConfigurationComponent, VerifyDomainComponent],
  exports: [CTConfigurationComponent, VerifyDomainComponent],
  imports: [ CommonModule, MatDialogModule, FormsModule, ReactiveFormsModule, CTAngularImportsModule, CTOnboardingRoutingModule ],
  entryComponents: [CTConfigurationComponent, VerifyDomainComponent],
  providers: [CTOnboardingService] })

export class CTOnboardingModule {}
Run Code Online (Sandbox Code Playgroud)