Bird
Raised Fist0
Angularframework~5 mins

Route guards (canActivate, canDeactivate) in Angular - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the purpose of the canActivate guard in Angular routing?
The canActivate guard controls if a route can be entered. It checks conditions before allowing navigation to a route, like user authentication.
Click to reveal answer
beginner
What does the canDeactivate guard do in Angular?
The canDeactivate guard checks if it is okay to leave the current route. It can prevent navigation away, for example, if a form has unsaved changes.
Click to reveal answer
intermediate
How do you implement a canActivate guard in Angular?
Create a service that implements the CanActivate interface. Add a canActivate() method that returns true or false (or an Observable/Promise of those). Then add this guard to the route's canActivate array.
Click to reveal answer
beginner
When would you use canDeactivate guard in a real app?
Use canDeactivate to warn users about unsaved changes before leaving a form or page. It helps avoid losing data by accident.
Click to reveal answer
intermediate
What types of values can canActivate and canDeactivate return?
They can return a boolean, an Observable<boolean>, or a Promise<boolean>. This allows synchronous or asynchronous checks before navigation.
Click to reveal answer
What does the canActivate guard control?
AWhether a route can be entered
BWhether a route can be left
CHow a route is styled
DHow data is fetched for a route
Which interface should a service implement to act as a canDeactivate guard?
ACanActivate
BResolve
CCanDeactivate
DCanLoad
What can canActivate return to allow asynchronous checks?
AObservable<boolean> or Promise<boolean>
BOnly string
CNumber
DOnly boolean
When is canDeactivate guard typically used?
ABefore entering a route
BBefore leaving a route
CTo fetch data
DTo style components
How do you add a canActivate guard to a route?
AAdd it to the module imports
BAdd it to the route's <code>canDeactivate</code> array
CAdd it to the component's decorator
DAdd it to the route's <code>canActivate</code> array
Explain how canActivate and canDeactivate guards help control navigation in Angular apps.
Think about when you want to stop users from going to or leaving a page.
You got /4 concepts.
    Describe the steps to create and use a canActivate guard in an Angular application.
    Focus on the service, method, return type, and route setup.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the primary purpose of the canActivate guard in Angular routing?
      easy
      A. To handle errors during route navigation.
      B. To check if navigation to a route is allowed before entering it.
      C. To preload data before the route loads.
      D. To confirm if navigation away from a route is allowed.

      Solution

      1. Step 1: Understand the role of canActivate

        canActivate is a route guard that runs before entering a route to decide if navigation is allowed.
      2. Step 2: Differentiate from other guards

        canDeactivate checks leaving a route, not entering. Preloading and error handling are unrelated to canActivate.
      3. Final Answer:

        To check if navigation to a route is allowed before entering it. -> Option B
      4. Quick Check:

        canActivate = check before entering route [OK]
      Hint: canActivate controls entering routes, canDeactivate controls leaving [OK]
      Common Mistakes:
      • Confusing canActivate with canDeactivate
      • Thinking canActivate preloads data
      • Assuming canActivate handles errors
      2. Which of the following is the correct syntax to apply a canDeactivate guard to a route in Angular?
      easy
      A. { path: 'edit', component: EditComponent, canDeactivate: [UnsavedChangesGuard] }
      B. { path: 'edit', component: EditComponent, canLoad: [LoadGuard] }
      C. { path: 'edit', component: EditComponent, canActivate: [AuthGuard] }
      D. { path: 'edit', component: EditComponent, canActivateChild: [ChildGuard] }

      Solution

      1. Step 1: Identify the guard type for leaving routes

        canDeactivate is used to check if navigation away from a route is allowed.
      2. Step 2: Match syntax with canDeactivate

        The correct syntax uses canDeactivate: [GuardName] inside the route object.
      3. Final Answer:

        { path: 'edit', component: EditComponent, canDeactivate: [UnsavedChangesGuard] } -> Option A
      4. Quick Check:

        canDeactivate syntax = canDeactivate: [Guard] [OK]
      Hint: Use canDeactivate: [Guard] to protect leaving a route [OK]
      Common Mistakes:
      • Using canActivate instead of canDeactivate for leaving routes
      • Confusing canLoad with canDeactivate
      • Missing brackets around guard name
      3. Given this canDeactivate guard code snippet, what will happen when the user tries to leave the EditComponent with unsaved changes?
      export class UnsavedChangesGuard implements CanDeactivate<EditComponent> {
        canDeactivate(component: EditComponent): boolean {
          if (component.hasUnsavedChanges()) {
            return confirm('You have unsaved changes. Leave anyway?');
          }
          return true;
        }
      }
      medium
      A. The guard throws an error because confirm is not allowed.
      B. The user is always allowed to leave without confirmation.
      C. The user is blocked from leaving if there are unsaved changes.
      D. The user is asked to confirm leaving only if there are unsaved changes.

      Solution

      1. Step 1: Analyze the guard logic

        The guard checks if component.hasUnsavedChanges() returns true, then asks for confirmation.
      2. Step 2: Understand the confirm behavior

        If the user confirms, confirm() returns true allowing navigation; otherwise, navigation is blocked.
      3. Final Answer:

        The user is asked to confirm leaving only if there are unsaved changes. -> Option D
      4. Quick Check:

        canDeactivate confirms only if unsaved changes exist [OK]
      Hint: canDeactivate can prompt user to confirm leaving [OK]
      Common Mistakes:
      • Assuming user can leave without confirmation always
      • Thinking guard blocks leaving without prompt
      • Believing confirm causes errors in Angular guards
      4. Identify the error in this canActivate guard implementation:
      export class AuthGuard implements CanActivate {
        canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
          if (this.authService.isLoggedIn()) {
            return true;
          }
        }
      }
      medium
      A. Missing return statement when user is not logged in.
      B. Incorrect method name; should be canDeactivate.
      C. The guard should return a Promise, not boolean.
      D. The guard must not use services inside canActivate.

      Solution

      1. Step 1: Check all code paths return a value

        If isLoggedIn() is false, the method returns nothing (undefined), which is invalid.
      2. Step 2: Understand guard return requirements

        canActivate must return true, false, or an observable/promise resolving to those. Missing return causes errors.
      3. Final Answer:

        Missing return statement when user is not logged in. -> Option A
      4. Quick Check:

        All canActivate paths must return true/false [OK]
      Hint: Always return true or false in all canActivate paths [OK]
      Common Mistakes:
      • Not returning false or redirect when unauthorized
      • Confusing canActivate with canDeactivate method names
      • Thinking services can't be used in guards
      5. You want to prevent users from leaving a form page if they have unsaved changes, but only if they are editing (not creating new). Which approach correctly uses canDeactivate to achieve this?
      hard
      A. Use canActivate guard to check unsaved changes before entering the form route.
      B. Use canDeactivate guard that always returns true to allow navigation.
      C. Use canDeactivate guard that checks component.isEditing and component.hasUnsavedChanges() before confirming navigation.
      D. Use canActivateChild guard to block leaving the form.

      Solution

      1. Step 1: Identify when to block navigation away

        Blocking leaving only applies when editing and unsaved changes exist, so guard must check both conditions.
      2. Step 2: Use canDeactivate guard properly

        canDeactivate runs when leaving a route, so it is the correct place to check and confirm navigation.
      3. Final Answer:

        Use canDeactivate guard that checks component.isEditing and component.hasUnsavedChanges() before confirming navigation. -> Option C
      4. Quick Check:

        canDeactivate with condition on editing and unsaved changes [OK]
      Hint: Check editing and unsaved changes inside canDeactivate guard [OK]
      Common Mistakes:
      • Using canActivate to block leaving routes
      • Always returning true in canDeactivate guard
      • Confusing canActivateChild with canDeactivate
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard