Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import { Injectable } from '@angular/core';
- import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, CanDeactivate } from '@angular/router';
- import { Observable } from 'rxjs';
- import { NgForm } from "@angular/forms";
- import { createMPForm } from "../components/site-settings/site-settings.component"
- @Injectable({
- providedIn: 'root'
- })
- @Injectable()
- export abstract class FormGuard implements CanActivate {
- abstract get form(): NgForm;
- formDirty(): boolean {
- return createMPForm.dirty
- }
- constructor() { }
- canActivate(
- route: ActivatedRouteSnapshot,
- state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
- if (this.formDirty()) {
- if (confirm("You have unsaved changes! If you leave, your changes will be lost.")) {
- return true;}
- else {
- return false;}
- }
- }
- }
- export class createMPForm {
- @ViewChild("createMPForm", {read: ElementRef}) form: ElementRef;
- }
- import { FormGuard } from './services/form-guard.service';
- import { SiteSettingsComponent } from './components/site-settings/site-settings.component';
- import { SiteComponent } from './components/site/site.component';
- import { AuthGuard } from './services/auth-guard.service';
- const routes: Routes = [
- { path: 'sites', component: SitesComponent, canActivate: [AuthGuard] }, //the route I want to keep from navigating to if the form is dirty
- { path: 'site-settings/:siteHid', component: SiteSettingsComponent, canActivate: [AuthGuard] }// the route with the form
- ];
- @NgModule({
- imports: [RouterModule.forRoot(routes)],
- exports: [RouterModule],
- providers: [AuthGuard, FormGuard]
- })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement