使用Angular 7.x,我想相应地改变我的父标题组件到子路由,如果它们被激活或不激活。所以在我的情况下
AppComponent 功能模块< =检测更改…
你可以尝试设置孩子的标题作为这样的路线的一部分。
const routes: Routes =[ { path: 'create', component: SomeComponent, data : {header_title : 'some title'} }, ]; ngOnInit() { this.title = this.route.data.subscribe(x => console.log(x)); }
并获取子组件中的标题,并使用服务将其设置为标题标题。
你可以听 NavigationEnd 中的事件 ParentComponent 或者(我认为)你可以使用标题服务。
NavigationEnd
ParentComponent
解决方案1:
在 ParentComponent
import {NavigationEnd, Router} from '@angular/router'; import {filter} from 'rxjs/operators'; ... constructor(private router: Router, private readonly route: ActivatedRoute) { this.subscribeRouterEvents(); } subscribeRouterEvents = () => { this.router.events.pipe( filter(e => e instanceof NavigationEnd) ).subscribe(() => { this.title = this.route.snapshot.data['title']; // Assuming your route is like: // {path: 'path', component: MyComponent, data: { title: 'Page Title'}} });
解决方案2:
运用 TitleService 。创建一个包含页面标题的服务,订阅标题 ParentComponent 并从中发送新的标题 ChildComponent 。
TitleService
ChildComponent
的 TitleService 强>
@Injectable({ providedIn: 'root' }) export class TitleService { private defaultTitle = 'Page Title'; private titleSubject: BehaviorSubject<string> = new BehaviorSubject(this.defaultTitle); public title: Observable<string>; constructor(private titleService: Title) { this.title = this.titleSubject.asObservable(); } public setTitle(title: string) { this.titleSubject.next(title); } }
的 为父级 强>
pageTitle = 'Page Title'; constructor(private titleService: TitleService) {} ngOnInit(){ this.titleService.title.subscribe(value => this.pageTitle = value); }
的 ChildComponent 强>
pageTitle = 'Child Component Title'; constructor(private titleService: TitleService) {} ngOnInit(){ this.titleService.setTitle(this.pageTitle); }