Moved all heroes functionality into milestone 2 Crisis Center initial functionality is milestone 3 Admin feature module as milestone 4 including route guard examples Updated milestone 5 to lazy load admin feature module Added examples for CanLoad, CanActivateChildren guard, component-less routes Added section on explanation of ActivatedRoute Added section on animating route components Added section on relative navigation
		
			
				
	
	
		
			32 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			32 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| // #docregion
 | |
| import { Injectable }           from '@angular/core';
 | |
| import { CanDeactivate,
 | |
|          ActivatedRouteSnapshot,
 | |
|          RouterStateSnapshot }  from '@angular/router';
 | |
| 
 | |
| import { CrisisDetailComponent } from './crisis-center/crisis-detail.component';
 | |
| 
 | |
| @Injectable()
 | |
| export class CanDeactivateGuard implements CanDeactivate<CrisisDetailComponent> {
 | |
| 
 | |
|   canDeactivate(
 | |
|     component: CrisisDetailComponent,
 | |
|     route: ActivatedRouteSnapshot,
 | |
|     state: RouterStateSnapshot
 | |
|   ): Promise<boolean> | boolean {
 | |
|     // Get the Crisis Center ID
 | |
|     console.log(route.params['id']);
 | |
| 
 | |
|     // Get the current URL
 | |
|     console.log(state.url);
 | |
| 
 | |
|     // Allow synchronous navigation (`true`) if no crisis or the crisis is unchanged
 | |
|     if (!component.crisis || component.crisis.name === component.editName) {
 | |
|       return true;
 | |
|     }
 | |
|     // Otherwise ask the user with the dialog service and return its
 | |
|     // promise which resolves to true or false when the user decides
 | |
|     return component.dialogService.confirm('Discard changes?');
 | |
|   }
 | |
| }
 |