Хорошо, поэтому я нашел способ, который работает для меня.
Первое, что я сделал, было:
Когда форма заполняется внутренними данными, я устанавливаю ее в нетронутом виде.
this.addForm.markAsUntouched;
this.addForm.markAsPristine;
После этого я проверяю, нажал ли пользователь клавишу Es c или он нажал за пределами модального окна.
Для клавиши Es c я сделал следующее:
@HostListener('window:keyup.esc') onKeyUp() {
if (this.addForm.dirty) {
this.dialogRef.disableClose = true;
let cn = confirm('Estas seguro que deseas cerrar ? Perderas todos los progresos no guardados.')
if (cn) {
this.dialogRef.close();
} else {
return false;
}
}
this.dialogRef.close();
}
Для щелчка на заднем фоне я сделал это:
constructor(
public dialogRef: MatDialogRef<EditRequestComponent>,
@Inject(MAT_DIALOG_DATA) public data: any,
private commonFunctions: CommonFunctions,
private managementService: ManagementService,
private fb: FormBuilder,
private router: Router
) {
dialogRef.disableClose = true;
dialogRef.backdropClick().subscribe(() => {
if (this.addForm.dirty) {
this.dialogRef.disableClose = true;
let cn = confirm('Estas seguro que deseas cerrar ? Perderas todos los progresos no guardados.')
if (cn) {
this.dialogRef.close();
} else {
return false;
}
}
this.dialogRef.close();
})
}
Как видите, это тот же код, но с некоторыми другими логами c, на данный момент он работает, Я хотел поделиться своим ответом со всеми, кто застрял, как я. Теперь ему просто нужен рефакторинг, который я сделаю, чтобы не повторять код и он выглядел чище.
Большое спасибо за ваши ответы @sibabrat swain!