Angular 14 route title and custom strategy

Thanks to a new feature in the latest angular 14 version, we can set unique page titles with the new Route.title
property in the Angular Router and we can also provide custom title strategies for advanced use cases.
For example:
import { Routes } from '@angular/router';
export const routes: Routes = [
{
path: 'home',
title: 'Home Page',
loadComponent: () =>
import('./home/home.component').then(
({ HomeComponent }) => HomeComponent
),
},
{
path: 'auth',
title: 'Auth Page',
loadComponent: () =>
import('./auth/auth.component').then(
({ AuthComponent }) => AuthComponent
),
},
];
The title
property takes in the page title that gets changed when the route changes.
You can also configure more complex title logic by extending the TitleStrategy
exported by @angular/router
. For example, in the src/app/app-routing.module.ts
file, add the following code:
import { Injectable } from '@angular/core';
import { Title } from '@angular/platform-browser';
import { RouterStateSnapshot, Routes, TitleStrategy } from '@angular/router';
@Injectable()
export class CustomTitleStrategy extends TitleStrategy {
constructor(private readonly title: Title) {
super();
}
override updateTitle(routerState: RouterStateSnapshot): void {
const title = this.buildTitle(routerState);
if (title !== undefined) {
this.title.setTitle(`Angular 14 App - ${title}`);
} else {
this.title.setTitle(`Angular 14 App`);
}
}
}
export const routes: Routes = [
{
path: 'home',
title: 'Home Page',
loadComponent: () =>
import('./home/home.component').then(
({ HomeComponent }) => HomeComponent
),
},
{
path: 'auth',
title: 'Auth',
loadComponent: () =>
import('./auth/auth.component').then(
({ AuthComponent }) => AuthComponent
),
},
];
Next, open the src/main.ts
file and update the providers
array as follows:
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { importProvidersFrom, enableProdMode } from '@angular/core';
import { bootstrapApplication } from '@angular/platform-browser';
import { RouterModule, TitleStrategy } from '@angular/router';
import { routes, CustomTitleStrategy } from './app/app-routing.module';
import { AppComponent } from './app/app.component';
import { environment } from './environments/environment';
if (environment.production) {
enableProdMode();
}
bootstrapApplication(AppComponent, {
providers: [
importProvidersFrom(RouterModule.forRoot(routes), BrowserAnimationsModule),
{
provide: TitleStrategy,
useClass: CustomTitleStrategy,
},
],
The HomeComponent gets the title as "Angular 14 App" since it is the default title
provided in the CustomTitleStrategy
when you do not set the title
property in the route configuration.
- Author: Ahmed Bouchefra Follow @ahmedbouchefra
-
Date:
Related posts
How to send authorization header in Angular 14 Angular 14 Tutorial By Example: REST API & HttpClient GET Angular 14 route title and custom strategy Angular 14 inject example: reactive decorator Angular 14 inject How to enable CORS in Angular 14 Angular v14 tutorial Add Tailwind CSS to Angular 14 apps Import standalone components in Angular 14 Generate standalone components in Angular 14 Add Bootstrap to Angular 14 example Upgrade to Angular 14 Angular 14 standalone component Angular CLI 14 Render HTML with Angular and innerHtmlHands-on Angular eBook
Subscribe to our Angular newsletter and get our hands-on Angular book for free!
