现在可以在两个组件之间进行通信。但是不知道如何通过事件发射器将用户(选定的)输入值作为对象从MatDialog组件传递到父组件。单击提交按钮后,我要在此处将选定的选项值和文本区域值作为对象传递。
dialog.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>
dialog.ts
onSubmitReason = new EventEmitter();
submitUserReason(): void {
this.onSubmitReason.emit('hello');
}
onConfirmClick(): void {
this.dialogRef.close(true);
}
parent.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();
});
非常感谢任何帮助。
答案 0 :(得分:2)
我假设有两个按钮。 1)提交2)关闭
因此,如果要在“提交”按钮上的父组件中选择数据,请点击
submitUserReason(): void {
this.dialogRef.close({ option: userSelectedOption, reason:userReason });
}
在父组件中,
dialogRef.afterClosed().subscribe(result => {
console.log(result);
});
答案 1 :(得分:1)
在您的dialog.ts中,您想传递所选的选项,而不只是一个字符串。像这样:
submitUserReason(): void {
this.onSubmitReason.emit(selectedIssue);
}
您可以发出任何您想要的东西(取决于您键入内容的方式),因此,如果您想传递更多的数据,您还可以传递一个对象:
submitUserReason(): void {
let data = { issue : selectedIssue, reason: userReason};
this.onSubmitReason.emit(data);
}