Нет провайдера для 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!