Как выставить метод afterClosed () / наблюдаемый из сервиса Modal Wrapper в Angular - PullRequest
1 голос
/ 02 апреля 2019

В настоящее время я пытаюсь научить себя программированию и Angular, создав небольшое приложение для себя. В своем приложении я сделал сервис-оболочку для Angular Material ModalDialog. Мое приложение представляет собой гибрид Angular и AngularJS (я работал над этим в течение некоторого времени).

Сервис-оболочка выглядит так:

export class ModalDialogWrapperService {

  constructor(private dialog: MatDialog, private zone: NgZone) {
  }
  openWarningWindow(warning) {

    this.zone.run(() => {
        const dialogRef = this.dialog.open(WarningComponent, {
          data: warning,
          panelClass: 'dialog--warning'
        });
        dialogRef.afterClosed().subscribe(() => {
          console.log('I need access to this');
        });
    });
  }

Это замечательно, так как в угловом компоненте я могу поднять модал, просто импортировав мой сервис и вызвав метод следующим образом, вот компонентный метод, который использует сервис:

// component code
public raiseWarning(warning: any): void {
    this.modalDialogWrapperService.openWarningWindow({
      type: warning.type,
      id: warning.id,
      tags: warning.tags
    });
  }

Это здорово, но мне нужно получить доступ, когда диалог закрыт и данные, которые он возвращает. Я могу перехватить это в моем сервисе, см. console.log, но я не могу получить доступ к этому в компоненте. Должен ли я добавить код в свой компонент, как

// component code
public raiseWarning(warning: any): void {
    const dialogRef = this.modalDialogWrapperService.openWarningWindow({
      type: warning.type,
      id: warning.id,
      tags: warning.tags
    });

    dialogRef.afterClosed().subscribe(() => {
          console.log('I am in the component');
    });
  }

Я получаю неопределенную ошибку, мой вопрос, как мне выставить afterClosed().subscribe из моей службы оболочки компоненту. Любые советы высоко ценится. Нужно ли return dialogRef из сервиса как то так?

openWarningWindow(warning) {

    this.zone.run(() => {
        // const dialogRef =
        return this.dialog.open(WarningComponent, {
          data: warning,
          panelClass: 'dialog--warning'
        });
    });
  }

Я пробовал это с измененным Кодом компонента, но он не работал. Я получаю ошибку TypeError: Cannot read property 'afterClosed' of undefined

1 Ответ

1 голос
/ 02 апреля 2019

Я не вижу возврата из вашего openWarningWindow.Я подозреваю, что это может быть случай:

openWarningWindow(warning) {

return this.zone.run(() => {
    // const dialogRef =
    return this.dialog.open(WarningComponent, {
      data: warning,
      panelClass: 'dialog--warning'
    });
});

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...