Возврат данных из MdDialog в Angular Материал 2

Я использую MdDialogModule для отображения окна диалога с полем ввода. Модаль открывается нормально, и я могу ввести текст в поле ввода и отправить, но при нажатии кнопки "Отправить" я хочу, чтобы данные в форме ввода возвращались к основному компоненту, который вызывал компонент "Диалог", а также закрывал диалоговое окно "Диалог".

Как мне это сделать? Я могу передавать данные в компонент MdDialog, но не нашел никакого ресурса о том, как вернуть данные в компонент из MdDialogComponent.

Код компонента My Dialog выглядит следующим образом:

import { Component, OnInit, InjectionToken, Inject } from '@angular/core';
import { MD_DIALOG_DATA, MdDialogRef } from "@angular/material";

@Component({
  selector: 'app-add-book',
  templateUrl: './add-book.component.html',
  styleUrls: ['./add-book.component.css']
})
export class AddBookComponent {

  constructor() { }

}

и метод в главном компоненте, вызывающем диалоговое окно, выглядит следующим образом. Теперь ответ не возвращается, он возвращает Undefined, поскольку я еще не понял его.

openCreateDialog() {
    let dialogRef = this.dialog.open(AddBookComponent)
      .afterClosed()
      .subscribe(response => {
        console.log(response);
      });
  }

Ответ 1

Сначала вам нужно добавить MdDialogRef в компонент диалога

export class AddBookComponent {
  constructor(private dialogRef: MdDialogRef<AddBookComponent>) { }
}

Затем используйте dialogRef.close для возврата данных

save() {
  this.dialogRef.close({ data: 'data' });
}

Ответ 2

Спасибо за комментарий Гарри первым...

ниже приведен весь связанный скрипт

Компонент ts:

  let dialogRef = this.dialog.open(DataListDialogComponent, dialogConfig).afterClosed()
  .subscribe(response => {
    console.log(response);
  });

диалог ts:

    this.dialogRef.close({data:'data'});

Ответ 3

"Dialog.open" можно использовать для открытия компонента диалога.

Вы можете указать, какие данные вы хотите отправить в компонент диалога, добавив второй параметр. Это может содержать информацию, такую как документы о ширине и высоте, для получения дополнительной информации.

Чтобы закрыть вы можете использовать ref.close().

Если вы хотите получить данные из диалогового окна, вы можете использовать ref.componentInstance.updatedSelectedArms, который является событием, инициируемым при необходимости

var ref = this.dialog.open(SelectLoadingArmComponent, {
  width: '500px',
  data: { 
    loadingArms: this.loadingArms, 
    selectedloadingArms: this.selectedloadingArms
  }
});

ref.componentInstance.updatedSelectedArms.subscribe(
  (data) => {
    console.log(data)
    ref.close()
  }
);

Ответ 4

это поможет Ссылка и очень легко попробовать свой собственный путь.