Нет провайдера для DialogRef InjectionToken

Я создаю директиву, которая открывает подтверждение JavaScript или диалог CDK в зависимости от условия, диалог CDK является необязательным, и когда он не используется, я хочу, чтобы он был встряхнут.

Поэтому я использовал InjectionToken, чтобы получить ссылку на диалог CDK и dialogRef .

      /** sample.model.ts **/
export const APP_MAT_DIALOG = new InjectionToken('app-mat-dialog');
export const APP_MAT_DIALOG_REF = new InjectionToken('app-mat-dialog-ref');
      /** Consumers module **/
import {Dialog, DialogModule, DialogRef} from '@angular/cdk/dialog';

imports: [DialogModule],
providers: [
  {provide: APP_MAT_DIALOG, useExisting: Dialog},
  {provide: APP_MAT_DIALOG_REF, useExisting: DialogRef},
],
      /** sample-dialog.directive.ts **/
constructor(@Optional() @Inject(APP_MAT_DIALOG) private dialog: any) {}

open() {
  //I got the CDK's dialog reference from the consumer's module, this works fine until here, 
  const dialogRef = this.dialog.open(MyDialogComponent, {});
 
  dialogRef.closed.subscribe((confirmed: any) => {
    //handle result
  });
}
      export class MyDialogComponent {
  //I don't get CDK's dialogRef, got an error instead
  constructor(@Optional() @Inject(APP_MAT_DIALOG_REF) public dialogRef: any) {}
}

DialogRef CDK создается динамически, когда диалог открыт, и потребитель не может его передать? Как получить ссылку на dialogRef?

Когда потребитель переходит из модуля, я получаю ошибку ниже

      ERROR NullInjectorError: R3InjectorError[InjectionToken app-mat-dialog-ref -> InjectionToken app-mat-dialog-ref -> DialogRef -> DialogRef -> DialogRef]: 
  NullInjectorError: No provider for DialogRef!

0 ответов

Другие вопросы по тегам