【问题标题】:How to use same component in normal way and with angular material dialog both? [closed]如何以正常方式和角度材料对话框使用相同的组件? [关闭]
【发布时间】:2020-01-15 18:54:58
【问题描述】:

我有一个组件正在尝试从 2 个地方使用

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

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

  constructor(
    public dialogRef: MatDialogRef<CTConfigurationComponent>,
    @Inject(MAT_DIALOG_DATA) public dialogData: any,
  ) {}

情况 2 工作正常,但情况 1 因以下错误而中断

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

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

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

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

也无法正常工作。


EDIT-1:

(method) Injector.get(token: any, notFoundValue?: any)

问题 - 2:

当我们通过构造函数进行 DI 时,是否有类似 notFoundValue 的 Injector.get 的东西?

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

【问题讨论】:

  • 当你使用MatDialogRef时,你的html是否也包含&lt;CTConfigurationComponent&gt;&lt;/CTConfigurationComponent&gt;?.
  • 不,我在一个工作流程中使用组件选择器,而在另一个工作流程中,我在角材料内打开此组件。作为const dialogRef = this.matDialog.open(CTConfigurationComponent, { minWidth: '320px', maxWidth: '450px', disableClose: true, panelClass: 'consent-banner-panel-class', backdropClass: 'backdrop-class-dark8', data: {} });
  • 您可以发布您的app.module.ts 代码吗?
  • 其实配置组件是featured module,所以和app.module没有关系。
  • @NgModule({ declarations: [CTOnboardingComponent, CTConfigurationComponent, VerifyDomainComponent], exports: [CTConfigurationComponent, VerifyDomainComponent], imports: [ CommonModule, FormsModule, ReactiveFormsModule, CTAngularImportsModule, CTOnboardingRoutingModule ], entryComponents: [CTConfigurationComponent, VerifyDomainComponent], providers: [CTOnboardingService] }) export class CTOnboardingModule {}

标签: angular


【解决方案1】:

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

所以而不是这个

  constructor(
    public dialogRef: MatDialogRef<CTConfigurationComponent>,
    @Inject(MAT_DIALOG_DATA) public dialogData: any
  ) {}

我正在使用下面的代码

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

【讨论】:

    【解决方案2】:

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

    app.module.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 {}
    

    【讨论】:

    • MatDialogModule 已经导入到CTAngularImportsModule 内部
    猜你喜欢
    • 2020-01-09
    • 1970-01-01
    • 2018-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-28
    • 2021-11-27
    • 1970-01-01
    相关资源
    最近更新 更多