
Learn how nested (child) routes work in Angular, why multiple router outlets are useful, and how to implement tabbed navigation in complex dashboards.
Alain Chautard
April 21, 2026
Nested routes, or child routes, can be used when multiple router outlets are present in an Angular application. Why would we have multiple router outlets in the first place? Let’s take an example.
Say you have an application with multiple screens (pages) that you can navigate to. One of these screens is a complex dashboard that includes a section with tabs. You could use the router to implement navigation within those tabs, using nested routes.

This means we have a main router outlet as follows in the App component:
<div>
<button type="button" routerLink=""><< Menu</button>
</div>
<div class="tabs-container">
<div class="tabs">
<a routerLink="tab1" routerLinkActive="active">Tab 1</a>
<a routerLink="tab2" routerLinkActive="active">Tab 2</a>
<a routerLink="tab3" routerLinkActive="active">Tab 3</a>
</div>
<div class="tab-content">
<router-outlet></router-outlet>
</div>
</div>

The router config looks like this — using the children section for nested / child routing:
{
path: 'tabs',
component: TabsComponent,
children: [
{ path: '', redirectTo: 'tab1', pathMatch: 'full' },
{ path: 'tab1', component: Tab1Component },
{ path: 'tab2', component: Tab2Component },
{ path: 'tab3', component: Tab3Component }
]
}
That config means that if the browser URL becomes /tabs, the TabComponent is displayed in the main router outlet, and the Tab1Component is displayed in the router outlet of TabComponent, because the empty child path redirects to /tab1, which then renders Tab1Component.
Then, if the browser URL becomes /tabs/tab3, the TabComponent is still displayed in the main router outlet, and Tab3Component is displayed in the router outlet of TabComponent.

This has three important benefits:
You can see the code of my example on Stackblitz here.
Get the latest news and updates on developer certifications. Content is updated regularly, so please make sure to bookmark this page or sign up to get the latest content directly in your inbox.

How the Queue Worker Loop Actually Works
Master Laravel queues by understanding what happens behind the scenes when jobs are dispatched and processed. This guide explores queue workers, model serialization, retries, failed jobs, chaining, and batching—key concepts for building reliable applications and succeeding in Laravel certification exams.
Steve McDougall
Jun 25, 2026

Getting Started with rstore in Vue
A walkthrough of rstore, the reactive data store for Vue with normalized caching, typed queries, and a plugin system.
Reza Baar
Jun 24, 2026

Promise.withResolvers(): The Deferred Pattern Built-In
Promise.withResolvers() replaces the manual deferred pattern in JavaScript. One destructuring, no executor, no let. ES2024, supported in all modern runtimes.
Martin Ferret
Jun 23, 2026