It is possible using both RouteGuard and pure Javascript code.
Component:
profileForm = this.fb.group({
ClientName: ['', [Validators.required]]
});
@HostListener('window:beforeunload', ['$event']) beforeUnloadHander(event: any) {
// alert();
debugger
var isFormDirty = document.getElementById('profileformStatus').innerText;
console.log(isFormDirty);
if(isFormDirty == 'true'){
return false;
}
else{
return true;
}
}
Component HTML:
<div id="profileformStatus">{{profileForm.dirty ? true:false}}</div>
Your Component Guard Service File(Optional):
import { CanDeactivate } from "@angular/router";
import { Injectable } from "@angular/core";
import { YourComponent } from "./projects/your-component";
@Injectable()
export class YourComponentCanDeactivateGuardService
implements CanDeactivate<YourComponent> {
canDeactivate(component: YourComponent): boolean {
if (component.profileForm.dirty) {
return confirm('Are you sure you want to discard your changes?');
}
return true;
}
}
Your Module: add The Above Guard(Optional)
@NgModule({
providers: [YourComponentCanDeactivateGuardService]
})
Finally
Update your routing module(Optional):
const routes: Routes = [
{
path: 'detail/:id',
component: YourComponent,
canDeactivate: [YourComponentCanDeactivateGuardService]
}
];
Done. Now it will prevent reload/back navigation both.