как передавать данные из диалогового окна в Angular

#html #angular #typescript #angular-material #dialog

#HTML #angular #typescript #angular-материал #диалог

Вопрос:

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

Я не совсем уверен, как я могу передавать данные между компонентом диалогового окна подтверждения и компонентом страницы редактирования.

Проект не будет выполняться на Stackblitz, но я загрузил эти два компонента здесь https://stackblitz.com/edit/angular-ivy-ztepf6?file=Edit Компонент/EditComponent.ts

поэтому я буду очень признателен, если кто-нибудь сможет это проверить и сможет мне помочь. Спасибо

Редактировать Component.TS

 this is how I open Comfirmation Dialog

  openSection() {
    let dialogRef = this.dialog.open(ConfirmDialogComponent, {
      data: {
        isSection: true, isSubsection: false
      },
    }
    );
  }
  openSubsection(){
      this.dialog.open(ConfirmDialogComponent, {
        data: {
          isSubsection: true, isSection: false
        },
      });
  }

//This is how I'm deleting right now without confirmation Dialog
  delete(sec) {
    if (this.isSection) {
      this.HelpService.deleteHelpSection(sec.id).subscribe(() => {
        const index = this.mappedSections.findIndex((value) => value.id == sec.id);
        this.mappedSections = this.mappedSections.filter(section => section.id != sec.id)
        if (~index) {
          this.HelpService.deleteHelpSubsection(sec.id).subscribe(() => {
            this.mappedSections = this.mappedSections.filter(section => section.id != sec.id);
          })
        }
      })
    } if (this.isSubsection) {
      this.HelpService.deleteHelpSubsection(sec.id).subscribe(() => {
        const index = this.mappedSections.findIndex((value) => value.id == sec.parentId);
        if (~index) {
          this.mappedSections[index].subSections = this.mappedSections[index].subSections.filter((subsection) => subsection.id != sec.id)
        }
      })
    }
  }
  

введите описание изображения здесь

Ответ №1:

подпишитесь на результат из модального.

  openSection() {
    let dialogRef = this.dialog.open(ConfirmDialogComponent, {
      data: {
        isSection: true, isSubsection: false
      },
    });

    dialogRef.afterClosed().subscribe(result => {
      console.log('The dialog was closed', result);
      if(result){
         this.delete(sec)
      }
    });
  }
  

из модального компонента передать данные

   <button mat-raised-button (click)="closeDialog()">Close</button>
  
 constructor(
    public dialogRef: MatDialogRef<ConfirmDialogComponent>
  ) {}  
  closeDialog() {
    this.dialogRef.close(true);
  }
  

проверьте этот рабочий пример
https://stackblitz.com/edit/angular-pd7vt6?file=src/app/dialog-elements-example.ts

Комментарии:

1. Привет, спасибо вам за это, но я не уверен, откуда берутся this.fromPage и this.fromDialog, потому что я получаю сообщение об ошибке в этих двух. 🙁

2. что fromPage и fromDialog являются переменными этого ConfirmDialogComponent .