const routes: Routes = [
{
path: 'register',
canDeactivate: [ExitGuard],
component: RegisterComponent
},
];
import { Injectable } from '@angular/core';
import { ActivatedRouteSnapshot, CanDeactivate, RouterStateSnapshot, UrlTree } from '@angular/router';
import { Observable } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class ExitGuard implements CanDeactivate<unknown> {
canDeactivate(
component: unknown,
currentRoute: ActivatedRouteSnapshot,
currentState: RouterStateSnapshot,
nextState?: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {
return confirm('Are you sure?');
}
}
import { Injectable } from '@angular/core';
import { ActivatedRouteSnapshot, CanDeactivate, RouterStateSnapshot, UrlTree } from '@angular/router';
import { Observable } from 'rxjs';
export interface OnExit {
onExit: () => Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree
}
@Injectable({
providedIn: 'root'
})
export class ExitGuard implements CanDeactivate<unknown> {
canDeactivate(
component: OnExit,
currentRoute: ActivatedRouteSnapshot,
currentState: RouterStateSnapshot,
nextState?: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {
return component.onExit ? component.onExit() : true;
}
}
import { Component, OnInit } from '@angular/core';
import { FormGroup, FormBuilder } from '@angular/forms';
import { OnExit } from './../../guards/exit.guard';
@Component({
selector: 'app-register',
templateUrl: './register.component.html',
styleUrls: ['./register.component.css']
})
export class RegisterComponent implements OnInit, OnExit {
form: FormGroup;
constructor(
private formBuilder: FormBuilder
) {
this.form = this.formBuilder.group({
email: [],
password: [],
confirmPassword: []
})
}
ngOnInit(): void {
}
onExit() {
if (this.form.dirty) {
const rta = confirm('Are you sure?');
return rta;
}
return true;
}
}