Angular 6 - MatDialog - EventEmitter - 从 MatDialog 将对象共享给父组件

wor*_*der 6 javascript eventemitter typescript angular-material angular

现在能够在两个组件之间进行通信。但不知道如何通过事件发射器从 MatDialog 组件将用户(选定)输入的值作为对象传递给父组件。在这里,我想在单击提交按钮后将选定的选项值和文本区域值作为对象传递。

对话框.html

          <mat-select [(ngModel)]="selectedIssue"  [ngModelOptions]="{standalone: true}">
            <mat-option  [value]="option1">Option AA</mat-option>
            <mat-option  [value]="option2">Option BB</mat-option>
            <mat-option  [value]="option3">Option CC</mat-option>
            <mat-option  [value]="option4">Option DD</mat-option>
            <mat-option  [value]="option5">Option EE</mat-option>
          </mat-select>


         <div>
            <textarea class="mention-reason" [(ngModel)]="reason" [ngModelOptions]="{standalone: true}"></textarea>
        </div>

    <button class="cancel" matDialogClose>Cancel</button>      
    <button class="submit" [mat-dialog-close] (click)="submitUserReason()">Submit</button></span>
Run Code Online (Sandbox Code Playgroud)

对话框.ts

onSubmitReason = new EventEmitter();
    submitUserReason(): void {
        this.onSubmitReason.emit('hello');
    }

    onConfirmClick(): void {
        this.dialogRef.close(true);     
    }
Run Code Online (Sandbox Code Playgroud)

父母.ts

callSupport() {
        const dialogRef = this.dialog.open(customerSupportComponent);
        const subscribeDialog = dialogRef.componentInstance.onSubmitReason.subscribe((data) => {
          console.log('dialog data', data);
          //i can see 'hello' from MatDialog
        });

    dialogRef.afterClosed().subscribe(result => {      
      subscribeDialog.unsubscribe();
    });
Run Code Online (Sandbox Code Playgroud)

非常感谢帮助的人。

Dar*_*ani 7

我假设有两个按钮。1) 提交 2) 关闭

因此,如果您希望在提交按钮上单击父组件中的选定数据,

submitUserReason(): void {
   this.dialogRef.close({ option: userSelectedOption, reason:userReason });
}
Run Code Online (Sandbox Code Playgroud)

在父组件中,

dialogRef.afterClosed().subscribe(result => {
console.log(result);
});
Run Code Online (Sandbox Code Playgroud)


Ash*_*ley 6

在dialog.ts 中,您希望传递所选选项而不仅仅是字符串。就像是:

submitUserReason(): void {
   this.onSubmitReason.emit(selectedIssue);
}
Run Code Online (Sandbox Code Playgroud)

您可以发出任何您想要的内容(取决于您输入内容的方式),因此如果您想传递更多数据,您也可以传递一个对象:

submitUserReason(): void {
   let data = { issue : selectedIssue, reason: userReason};
   this.onSubmitReason.emit(data);
}
Run Code Online (Sandbox Code Playgroud)