Я использую CanDeactivate Guard для обнаружения несохраненных изменений, и если изменения произошли, я показываю диалог подтверждения материала перед тем, как покинуть страницу.На основании действия диалога я верну логическое значение.
CanDeactivateGuard.ts:
export class DeactivateGuard implements CanDeactivate<UnsavedChangesComponent> {
canDeactivate(
component: UnsavedChangesComponent,
currentRoute: ActivatedRouteSnapshot,
currentState: RouterStateSnapshot,
nextState?: RouterStateSnapshot): boolean | Observable<boolean> | Promise<boolean> {
if (component.isDirty) {
return component.confirmDialog();
}
else {
return true;
}
}
}
UnsavedChangesComponent.ts:
confirmDialog(): boolean {
const dialogRef = this.dialog.open(ConfirmDialogComponent, {
width: '450px',
});
return dialogRef.afterClosed().subscribe(result => {
if (result == true) {
this.save();
return false
}
if (result == false) {
return true
}
});
}
verifyDialog.html:
<button mat-button color="primary" (click)="save()">Save</button>
<button mat-button color="primary" (click)="cancel()">Cancel</button>
verifyDialog.ts:
save(){
this.dialogRef.close(true);
}
cancel() {
this.dialogRef.close(false);
}
То же, что и метод подтверждения.Я хочу перемещаться по странице на основе возвращаемого значения действия диалога