Я бы хотел вызвать службу MatDialog из моего пользовательского класса, который расширен с помощью Quills BlockEmbed. Объекты моего пользовательского класса вызываются редактором Quill, а сам класс нигде не зарегистрирован. Проблема в том, что я понятия не имею, как правильно внедрить компонент / сервис MatDialog.
Первый мой упрощенный класс (custom-class.ts) выглядит так:
import { Injector } from '@angular/core';
import { MatDialog } from '@angular/material';
import { DialogContentComponent } from '../dialog-content-component/dialog-content-component';
import Quill from 'quill';
const BlockEmbed = Quill.import('blots/block/embed');
export class AssideBlot extends BlockEmbed {
static blotName = 'eAside';
static tagName = 'element-article';
static className = 'aside-articles';
static create(articleIdArray: any) {
// some quills stuff
const injector = Injector.create({ providers: [{ provide: MatDialog, deps: [] }] });
const dialog: MatDialog = injector.get(MatDialog);
const dialogRef = this.dialog.open(DialogContentComponent, {
data: {},
height: 'auto',
maxWidth: '100vw',
width: '600px',
panelClass: 'mat-dialog-no-gutter'
});
dialogRef.afterClosed().subscribe(result => {
// some logic
});
// More logic
}
// More quills stuff
}
Я не могу использовать конструктор ни при каких обстоятельствах: / Quills errors. В любом случае, как вы можете видеть, я решил использовать класс Injector, чтобы ввести MatDialog. Однако, даже если объект создан, я не могу открыть диалоговое окно ->
ERROR TypeError: Cannot read property 'position' of undefined
at MatDialog.push../node_modules/@angular/material/esm5/dialog.es5.js.MatDialog._getOverlayConfig (dialog.es5.js:946)
at MatDialog.push../node_modules/@angular/material/esm5/dialog.es5.js.MatDialog._createOverlay (dialog.es5.js:923)
at MatDialog.push../node_modules/@angular/material/esm5/dialog.es5.js.MatDialog.open (dialog.es5.js:846)
at HTMLButtonElement.<anonymous> (AsideArticleBlot.ts:36)
at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:423)
at Object.onInvokeTask (core.js:17290)
at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:422)
at Zone.push../node_modules/zone.js/dist/zone.js.Zone.runTask (zone.js:195)
at ZoneTask.push../node_modules/zone.js/dist/zone.js.ZoneTask.invokeTask [as invoke] (zone.js:498)
at invokeTask (zone.js:1744)
at HTMLButtonElement.globalZoneAwareCallback (zone.js:1781)
На данный момент я понятия не имею, правильно ли я использую Инжектор или даже возможно ли то, что я хочу. Любые предложения приветствуются:)