I'm using Angular 5 to build a small brochure type website. Thus far, I have my routes set up, and the page title changes dynamically based on the activated route. I got this working using the instructions on this blog: https://toddmotto.com/dynamic-page-titles-angular-2-router-events
I'm currently storing my routes and titles in app.module.ts as such:
imports: [
BrowserModule,
RouterModule.forRoot([
{
path: '',
component: HomeComponent,
data: {
title: 'Home'
}
},
{
path: 'about',
component: AboutComponent,
data: {
title: 'About'
}
},
{
path: 'products-and-services',
component: ProductsServicesComponent,
data: {
title: 'Products & Services'
}
},
{
path: 'world-class-laundry',
component: LaundryComponent,
data: {
title: 'World Class Laundry'
}
},
{
path: 'contact',
component: ContactComponent,
data: {
title: 'Contact'
}
},
{
path: '**',
component: NotFoundComponent,
data: {
title: 'Page Not Found'
}
}
])
],
I'd like to store my meta descriptions there as well, if adding them under data:
would be easy enough.
I'm pulling in that title data with the following code, which is noted in the blog link above:
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) => {
this.titleService.setTitle(event['title']);
});
}
So my question is, is there a way to dynamically set the meta description using the same method? If there is a way to combine the page title and meta description function, that would be ideal.
I have very limited Angular training, so this might be a nooby question. I'm more of a designer/css/html kind of guy.
Angular 6+ and RxJS 6+ solution for dynamically set title on route change
If/when you upgrade to Angular 6 this is the solution there.
This service will:
Create/change your SEO/meta service to the following.
Import your service and call it in the contructor.
app.component.ts
And this still requires to format routes like this.
Route file.ts
Hope this will help for you and other people looking to update the title/meta dynamically in Angular 6.
First create a SEOService or Something like below:
After injecting the SEOService in your component, set meta tags and title in OnInit method
Edit: For RxJs 6+ which uses pipe operator
Then configure your routes like
IMHO this is a clear way of dealing with meta tags. You can update facebook and twitter specific tags easier.
Title
andMeta
are providers that were introduced in Angular 4 and supposed to do this on both server and client side.To create or update
title
tag anddescription
meta tag, it is:Here are the relevant parts from my project. (Angular 2/4)
app-routing.module.ts:
app.component.ts (or your bootstrap component):
Hope it helps.