在Angular 7中,可以使用路由守卫来处理如果在路由数据中没有提供标题时使用默认标题的情况。以下是一个示例解决方法:
title.service.ts
的服务文件,用于设置页面标题:import { Injectable } from '@angular/core';
import { Title } from '@angular/platform-browser';
import { ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router';
@Injectable()
export class TitleService {
defaultTitle: string = '默认标题';
constructor(private title: Title, private router: Router) {}
setTitle(routeSnapshot: ActivatedRouteSnapshot, stateSnapshot: RouterStateSnapshot): void {
let title = routeSnapshot.data['title'] || this.defaultTitle;
this.title.setTitle(title);
}
watchRouteTitle(): void {
this.router.events.subscribe((event) => {
if (event instanceof NavigationEnd) {
let routeSnapshot = this.router.routerState.snapshot.root;
while (routeSnapshot.firstChild) {
routeSnapshot = routeSnapshot.firstChild;
}
this.setTitle(routeSnapshot, this.router.routerState.snapshot);
}
});
}
}
app.module.ts
文件中,将TitleService
服务添加到providers列表中:import { NgModule } from '@angular/core';
import { BrowserModule, Title } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';
import { TitleService } from './title.service';
@NgModule({
declarations: [AppComponent],
imports: [BrowserModule, AppRoutingModule],
providers: [Title, TitleService], // 添加TitleService服务
bootstrap: [AppComponent]
})
export class AppModule {}
data
属性来设置页面标题,如果没有提供标题则使用默认标题:import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { HomeComponent } from './home.component';
import { AboutComponent } from './about.component';
import { ContactComponent } from './contact.component';
const routes: Routes = [
{
path: '',
component: HomeComponent,
data: { title: '首页' } // 设置页面标题为'首页'
},
{
path: 'about',
component: AboutComponent,
data: { title: '关于' } // 设置页面标题为'关于'
},
{
path: 'contact',
component: ContactComponent,
data: {} // 没有提供标题,将使用默认标题
}
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule {}
TitleService
的watchRouteTitle
方法来监听路由变化并设置页面标题:import { Component, OnInit } from '@angular/core';
import { TitleService } from './title.service';
@Component({
selector: 'app-root',
template: `
`
})
export class AppComponent implements OnInit {
constructor(private titleService: TitleService) {}
ngOnInit(): void {
this.titleService.watchRouteTitle();
}
}
通过以上步骤,当路由切换时,页面的标题将根据路由数据中提供的标题进行设置,如果没有提供标题,则使用默认标题。