Javascript 如何将mat对话框注入服务?

Javascript 如何将mat对话框注入服务?,javascript,angular,angular-material,modal-dialog,Javascript,Angular,Angular Material,Modal Dialog,嗨,我有一个用于“角度材质”对话框的服务,如下所示: export class DialogModelService { participant: ParticipantInfoDTO; constructor(private dialog: MatDialog, route: ActivatedRoute) { this.participant = route.snapshot.data['participant']; } openEcheqSelectorDial

嗨,我有一个用于“角度材质”对话框的服务,如下所示:

export class DialogModelService {
  participant: ParticipantInfoDTO;

  constructor(private dialog: MatDialog, route: ActivatedRoute) {
    this.participant = route.snapshot.data['participant'];
  }

  openEcheqSelectorDialog(): Observable<any> {
  const dialogRef =     this.dialog.open(EcheqSelectorComponent, {
      width: '600px',
      maxHeight: 'calc(100vh - 2em)',
      data: {
        participant: console.log('participantIDTest', this.participant)
      }
    });

    return dialogRef.afterClosed();
  }
}

export class DetailComponent implements OnInit  {


  @Input() participant: ParticipantInfoDTO;

  constructor(private dialog: MatDialog, route: ActivatedRoute, private dialogModelService:  DialogModelService) {
    this.participant = route.snapshot.data['participant'];
  }

  ngOnInit() {

  }

  openEcheqSelectorDialog(){
    this.dialogModelService.openEcheqSelectorDialog().subscribe(data => console.log(data));
  }
}

这是模板:


  <button mat-raised-button class="button-spacing" (click)="openEcheqSelectorDialog()" i18n>Send echeq</button>

但我得到了这个错误:

DetailComponent.html:9 ERROR Error: No component factory found for EcheqSelectorComponent. Did you add it to @NgModule.entryComponents?
    at noComponentFactoryError (core.js:7754)
    at CodegenComponentFactoryResolver.push../node_modules/@angular/core/fesm5/core.js.CodegenComponentFactoryResolver.resolveComponentFactory (core.js:7792)
    at CdkPortalOutlet.push../node_modules/@angular/cdk/esm5/portal.es5.js.CdkPortalOutlet.attachComponentPortal (portal.es5.js:654)
    at 
所以我的问题是:我必须改变什么

多谢各位

我有。我将它们都放在模块中:

@NgModule({
  declarations: [
    EcheqQuestionComponent,
    EcheqDisplayComponent,
    EcheqViewListComponent,
    EcheqViewItemComponent,
    EcheqSelectorComponent,
    MetaBoxComponent,
    ConfirmDialogComponent,
    StrenumQuestionComponent,
    StrlistQuestionComponent,
    RadioQuestionComponent
  ],
  exports:[
    EcheqSelectorComponent
  ],

  imports: [
    // Angular
    CommonModule,
    FormsModule,

    // Angular Material
    MatDialogModule,
    MatButtonModule,
    MatIconModule,
    MatInputModule,
    MatSortModule,
    MatPaginatorModule,
    MatTableModule,
    MatExpansionModule,
    MatCardModule,
    MatDividerModule,
    MatCheckboxModule,
    MatRadioModule,
    MatSelectModule,

    // Carapax
    AuthModule,
    ParticipantEcheqRoutingModule,
    SharedModule
  ],
  entryComponents: [
    EcheqSelectorComponent,
    ConfirmDialogComponent
  ]
})
export class ParticipantEcheqModule { }

尝试在模块的入口组件和声明中添加EcheqSelectorComponent我认为问题与提供
DialogModelService
的地方有关

要检查这是否是问题所在,请尝试在ParticipantEcheqModule中提供DialogModelService:

@NgModule({
  declarations: [
    EcheqQuestionComponent,
    EcheqDisplayComponent,
    EcheqViewListComponent,
    EcheqViewItemComponent,
    EcheqSelectorComponent,
    MetaBoxComponent,
    ConfirmDialogComponent,
    StrenumQuestionComponent,
    StrlistQuestionComponent,
    RadioQuestionComponent
  ],
  exports:[
    EcheqSelectorComponent
  ],
  providers: [
    DialogModelService
  ],
  imports: [
    // Angular
    CommonModule,
    FormsModule,

    // Angular Material
    MatDialogModule,
    MatButtonModule,
    MatIconModule,
    MatInputModule,
    MatSortModule,
    MatPaginatorModule,
    MatTableModule,
    MatExpansionModule,
    MatCardModule,
    MatDividerModule,
    MatCheckboxModule,
    MatRadioModule,
    MatSelectModule,

    // Carapax
    AuthModule,
    ParticipantEcheqRoutingModule,
    SharedModule
  ],
  entryComponents: [
    EcheqSelectorComponent,
    ConfirmDialogComponent
  ]
})
export class ParticipantEcheqModule { }

您是否尝试将EcheqSelectorComponent添加为entryComponent?呃,您的确切意思是什么?是的,像这样:entryComponents:[EcheqSelectorComponent]
@NgModule({
  declarations: [
    EcheqQuestionComponent,
    EcheqDisplayComponent,
    EcheqViewListComponent,
    EcheqViewItemComponent,
    EcheqSelectorComponent,
    MetaBoxComponent,
    ConfirmDialogComponent,
    StrenumQuestionComponent,
    StrlistQuestionComponent,
    RadioQuestionComponent
  ],
  exports:[
    EcheqSelectorComponent
  ],
  providers: [
    DialogModelService
  ],
  imports: [
    // Angular
    CommonModule,
    FormsModule,

    // Angular Material
    MatDialogModule,
    MatButtonModule,
    MatIconModule,
    MatInputModule,
    MatSortModule,
    MatPaginatorModule,
    MatTableModule,
    MatExpansionModule,
    MatCardModule,
    MatDividerModule,
    MatCheckboxModule,
    MatRadioModule,
    MatSelectModule,

    // Carapax
    AuthModule,
    ParticipantEcheqRoutingModule,
    SharedModule
  ],
  entryComponents: [
    EcheqSelectorComponent,
    ConfirmDialogComponent
  ]
})
export class ParticipantEcheqModule { }