Bird
Raised Fist0
Angularframework~20 mins

Lazy loading modules with routes in Angular - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Angular Lazy Loading Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ component_behavior
intermediate
2:00remaining
What happens when a lazy loaded module route is accessed?
Consider an Angular app with a lazy loaded feature module configured in the routes. What is the behavior when the user navigates to that route for the first time?
Angular
const routes: Routes = [
  { path: 'feature', loadChildren: () => import('./feature/feature.module').then(m => m.FeatureModule) }
];
AThe feature module is loaded immediately when the app starts, regardless of navigation.
BThe feature module is loaded twice if the user navigates to '/feature' multiple times.
CThe feature module is never loaded unless manually imported in AppModule.
DThe feature module is loaded only when the user navigates to '/feature' for the first time.
Attempts:
2 left
💡 Hint
Lazy loading delays loading until the route is visited.
📝 Syntax
intermediate
2:00remaining
Identify the correct syntax for lazy loading a module in Angular routes
Which option shows the correct way to lazy load a module named 'AdminModule' located at './admin/admin.module' in Angular routing?
A{ path: 'admin', loadChildren: () => import('./admin/admin.module').then(m => m.AdminModule) }
B{ path: 'admin', loadChildren: './admin/admin.module#AdminModule' }
C{ path: 'admin', loadChildren: () => import('./admin.module').then(m => m.AdminModule) }
D{ path: 'admin', loadChildren: () => AdminModule }
Attempts:
2 left
💡 Hint
Use dynamic import with a promise and then() to specify the module.
🔧 Debug
advanced
2:00remaining
Why does this lazy loaded module fail to load?
Given this route configuration, the lazy loaded module does not load and the app throws an error. What is the cause?
Angular
const routes: Routes = [
  { path: 'dashboard', loadChildren: () => import('./dashboard/dashboard.module').then(m => m.Dashboard) }
];
AThe route path 'dashboard' must be an empty string for lazy loading to work.
BThe module class name 'Dashboard' is incorrect; it should be 'DashboardModule'.
CLazy loading requires the module to be imported in AppModule as well.
DThe import path './dashboard/dashboard.module' is invalid and should include the file extension.
Attempts:
2 left
💡 Hint
Check the exported class name in the module file.
❓ state_output
advanced
2:00remaining
How many times is a lazy loaded module instantiated?
If a user navigates multiple times to a lazy loaded route in Angular, how many instances of the lazy loaded module are created?
AOne instance is created and reused for all navigations to that route.
BA new instance is created every time the user navigates to the route.
CNo instances are created; lazy loaded modules are only for code splitting.
DTwo instances are created: one on first load and one on second navigation.
Attempts:
2 left
💡 Hint
Modules are loaded once and cached by Angular.
🧠 Conceptual
expert
2:00remaining
What is a key benefit of lazy loading modules in Angular apps?
Choose the best explanation for why developers use lazy loading for feature modules in Angular applications.
AIt forces all modules to be bundled into a single large file for faster loading.
BIt automatically preloads all modules in the background after app start.
CIt reduces the initial app load time by loading feature modules only when needed.
DIt disables route guards to improve navigation speed.
Attempts:
2 left
💡 Hint
Think about user experience on app startup.

Practice

(1/5)
1. What is the main purpose of lazy loading modules in Angular routing?
easy
A. To preload all modules when the app starts
B. To load modules only when the user navigates to their route
C. To load modules in alphabetical order
D. To load all modules at once for faster navigation

Solution

  1. Step 1: Understand lazy loading concept

    Lazy loading means delaying the loading of a module until it is needed, usually when the user navigates to a route that requires it.
  2. Step 2: Identify the purpose in routing

    In Angular routing, lazy loading helps improve app speed by loading modules only on demand, not all at once.
  3. Final Answer:

    To load modules only when the user navigates to their route -> Option B
  4. Quick Check:

    Lazy loading = load on demand [OK]
Hint: Lazy loading means load modules only when needed [OK]
Common Mistakes:
  • Thinking lazy loading loads all modules at start
  • Confusing lazy loading with preloading
  • Assuming lazy loading loads modules alphabetically
2. Which of the following is the correct syntax to lazy load a module named AdminModule in Angular routes?
easy
A. { path: 'admin', loadChildren: import('./admin/admin.module') }
B. { path: 'admin', loadChildren: './admin/admin.module#AdminModule' }
C. { path: 'admin', component: AdminModule }
D. { path: 'admin', loadChildren: () => import('./admin/admin.module').then(m => m.AdminModule) }

Solution

  1. Step 1: Recall Angular lazy loading syntax

    Angular uses dynamic import with a function returning a promise that resolves to the module class.
  2. Step 2: Match syntax to options

    { path: 'admin', loadChildren: () => import('./admin/admin.module').then(m => m.AdminModule) } uses the correct arrow function with import and then to get AdminModule. { path: 'admin', loadChildren: './admin/admin.module#AdminModule' } is old deprecated string syntax. Options C and D are incorrect usage.
  3. Final Answer:

    { path: 'admin', loadChildren: () => import('./admin/admin.module').then(m => m.AdminModule) } -> Option D
  4. Quick Check:

    Dynamic import with arrow function = correct syntax [OK]
Hint: Use arrow function with import().then() for lazy loading [OK]
Common Mistakes:
  • Using deprecated string syntax for loadChildren
  • Assigning component instead of loadChildren
  • Omitting the arrow function wrapper
3. Given this route configuration snippet:
{ path: 'shop', loadChildren: () => import('./shop/shop.module').then(m => m.ShopModule) }

What happens when the user navigates to /shop for the first time?
medium
A. The ShopModule is already loaded at app start, so navigation is instant
B. Navigation fails because loadChildren requires a component
C. The ShopModule is loaded asynchronously and its routes are activated
D. The entire app reloads to load ShopModule

Solution

  1. Step 1: Understand lazy loading behavior on navigation

    When navigating to a lazy loaded route for the first time, Angular loads the module asynchronously.
  2. Step 2: Identify what happens on first navigation

    The ShopModule is fetched, loaded, and its routes become active, enabling the user to see the shop page.
  3. Final Answer:

    The ShopModule is loaded asynchronously and its routes are activated -> Option C
  4. Quick Check:

    First navigation triggers async module load [OK]
Hint: First visit loads module asynchronously, not at app start [OK]
Common Mistakes:
  • Assuming module loads at app start
  • Confusing loadChildren with component property
  • Thinking app reloads on lazy load
4. Identify the error in this Angular route configuration for lazy loading:
{ path: 'dashboard', loadChildren: './dashboard/dashboard.module#DashboardModule' }
medium
A. Using string syntax for loadChildren is deprecated and causes errors
B. Missing component property for the route
C. Path should be capitalized as 'Dashboard'
D. loadChildren should be a component, not a string

Solution

  1. Step 1: Check loadChildren syntax

    The string syntax with '#ModuleName' is deprecated in Angular and may cause errors in recent versions.
  2. Step 2: Identify correct syntax

    Modern Angular requires loadChildren to be a function returning a dynamic import promise, not a string.
  3. Final Answer:

    Using string syntax for loadChildren is deprecated and causes errors -> Option A
  4. Quick Check:

    Use dynamic import function, not string [OK]
Hint: Avoid string syntax; use dynamic import function [OK]
Common Mistakes:
  • Using old string syntax for loadChildren
  • Confusing component and loadChildren properties
  • Ignoring case sensitivity in paths
5. You want to lazy load a feature module ProfileModule only when the user navigates to /profile. The module has child routes. Which is the best way to configure the main app routing to achieve this and ensure accessibility and performance?
hard
A. { path: 'profile', loadChildren: () => import('./profile/profile.module').then(m => m.ProfileModule), canActivate: [AuthGuard] }
B. { path: 'profile', component: ProfileModule }
C. { path: 'profile', loadChildren: () => import('./profile/profile.module').then(m => m.ProfileModule) }
D. { path: 'profile', loadChildren: './profile/profile.module#ProfileModule' }

Solution

  1. Step 1: Identify modern lazy loading syntax

    The correct syntax uses dynamic import with an arrow function returning a promise: loadChildren: () => import('./profile/profile.module').then(m => m.ProfileModule).
  2. Step 2: Consider best practices for accessibility and performance

    For protected features like a user profile, adding canActivate: [AuthGuard] ensures secure access while lazy loading maintains performance.
  3. Step 3: Eliminate incorrect configurations

    Using component property fails for modules with child routes. String syntax like './profile/profile.module#ProfileModule' is deprecated.
  4. Final Answer:

    { path: 'profile', loadChildren: () => import('./profile/profile.module').then(m => m.ProfileModule), canActivate: [AuthGuard] } -> Option A
  5. Quick Check:

    Lazy load with guard for best practice [OK]
Hint: Lazy load with import and add guards for security [OK]
Common Mistakes:
  • Using component instead of loadChildren for modules
  • Using deprecated string syntax
  • Forgetting route guards for protected routes
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