Preventing Navigation Away from a Route
Learn how to use guards to prevent navigation away from a route and prefetch route data to avoid flickering in the user interface.
We'll cover the following...
Guards are used not only to prevent access to a route but also to prevent navigation away from it. A guard that controls if a route can be deactivated is a function of the CanDeactivateFn type. We will learn how to use it by implementing a guard that notifies the user of pending products in the cart:
Create a file named
checkout.guard.tsinside thesrc\appfolder.Add the following
importstatements at the top of the file:
import { CanDeactivateFn } from '@angular/router';import { CartComponent } from './cart/cart.component';
Create the following
checkoutGuardfunction:
export const checkoutGuard: CanDeactivateFn<CartComponent> = () => {const confirmation = confirm('You have pending items in your cart. Do you want to continue?');return confirmation;};
In the preceding function, we set the type of the CanDeactivateFn function to CartComponent because we want to check whether the user navigates away from this component only.
Note: In a real-world scenario, we may need to create a generic guard to support additional components.
We then use the global confirm method to display a confirmation dialog before navigating away from the CartComponent. ...