How to change title of a page using angular(angular 2 or 4) route? How to change title of a page using angular(angular 2 or 4) route? angular angular

How to change title of a page using angular(angular 2 or 4) route?


You can to use @angular/plateform-browser to use the setTitle():

import { Title } from '@angular/platform-browser';@Component({  selector: 'your-component',})export class YourComponent implements onInit {  constructor(private title: Title) {} ngOnInit() {     this.title.setTitle('Title for this component'); }}


you have to pass "title" as data to your route

const routes: Routes = [{  path: 'calendar',  component: CalendarComponent,  children: [    { path: '', redirectTo: 'new', pathMatch: 'full' },    { path: 'all', component: CalendarListComponent, data: { title: 'My Calendar' } },    { path: 'new', component: CalendarEventComponent, data: { title: 'New Calendar Entry' } },    { path: ':id', component: CalendarEventComponent, data: { title: 'Calendar Entry' } }  ]}];

Then do this imports in your Component:

import { Title } from '@angular/platform-browser';import { Router, NavigationEnd, ActivatedRoute } from '@angular/router';import 'rxjs/add/operator/filter';import 'rxjs/add/operator/map';import 'rxjs/add/operator/mergeMap';

Once imported, we can inject them both:

@Component({  selector: 'app-root',  templateUrl: `    <div>      Hello world!    </div>  `})export class AppComponent {  constructor( private router: Router,               private activatedRoute: ActivatedRoute,               private titleService: Title) {}}

To update a page title statically, we can simply call setTitle like so:

ngOnInit() {     this.router.events        .filter((event) => event instanceof NavigationEnd)        .map(() => this.activatedRoute)        .map((route) => {            while (route.firstChild) route = route.firstChild;            return route;        })        .filter((route) => route.outlet === 'primary')        .mergeMap((route) => route.data)        .subscribe((event) => {            let title = 'Default Title Here'            if(event['title']) {                title = event['title'];            }            this.titleService.setTitle(title);        });}


I have tried with following way with few lines of code, hope it will help you.

You can pass any name in the data object of routes variable (app-routing.module.ts) as follows

const routes: Routes = [  {    path: '',     component: Component,    data: {      page_title: 'Title of your page'    }  }]

Then fetch the value of page_title in the data object of the routes into the app.component.ts and set as title.

import { Router, RoutesRecognized } from '@angular/router';import { Title } from '@angular/platform-browser';export class AppComponent {  page_title = '';  constructor(private titleService: Title, private route: Router) {    route.events.subscribe(event => {      if (event instanceof RoutesRecognized) {        let current_route = event.state.root.firstChild;        this.page_title = current_route?.data.page_title;        if (this.page_title == undefined) {          alert('Please set page title for the routing')        }        else {          titleService.setTitle(this.page_title);        }      }    });  }}

You can also try to declare the service then copy the codes in the constructor to a function inside the service and do the necessary imports, After call the function of service inside constructor of app.component.ts which will help in future projects.