如何使用相同的组件能够在正常的方式和角度材料对话框两者兼而有之?(How to use same c

2019-10-28 19:42发布

我有我想从两个地方使用组件

  1. 通常情况下,包括在一些模板选择器例如<comp-a></comp-a>
  2. 内部角材料对话框。

当使用具有角材料对话框相同组分,我要注入下面的依赖关系

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

这是工作的罚款以案例2,但病例1与下面的错误打破

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

问题1:1。是否可以告诉角度DI跳过几个依赖呢?

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

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

也不能正常工作。


编辑-1:

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

问题2:

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

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

Answer 1:

在你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 {}


Answer 2:

尝试很多事情之后,我有此错误的一种变通方法。 在这里张贴的解决方案,因此,它可能会有所帮助别人

所以不是这

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


文章来源: How to use same component in normal way and with angular material dialog both?
标签: angular