gpt4 book ai didi

Angular - 在应用程序组件中获取路由数据

转载 作者:行者123 更新时间:2023-12-03 20:26:27 24 4
gpt4 key购买 nike

我在 app-routing.module.ts 中配置了以下路由

const routes: Routes = [
{
path: 'abc/:id', component: AbcComponent, data: { category: 'Public' }
},
{
path: 'xyz/:id/tester/:mapId', component: XyzComponent, data: { category: 'Private' }
},
{ path: '**', redirectTo: '/page-not-found', pathMatch: 'full'}
]
app.component.ts 中,我想根据传递的 URL 获取每个 Route 的类别:
例如:去 http://myapp.com/abc/123 应该返回类别为 Publichttp://myapp.com/xyz/123/tester/456 应该返回类别为 Private这是我到目前为止所拥有的:
constructor(
private activatedRoute: ActivatedRoute,
private router: Router
)
{
checkRouteAndGetCategory()
}

checkRouteAndGetCategory()
{
this.router.events.pipe(
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(data =>
console.log('data', data)
)
}
上面的代码似乎没有找到正确的路线。例如:如果我在 http://myapp.com/abc/123 页面上并导航到 http://myapp.com/xyz/123/tester/456 ,它似乎获得了 http://myapp.com/abc/123 页面的数据。

最佳答案

这就是我的应用程序组件中的内容

constructor(private route: ActivatedRoute) {
}

ngOnInit(): void {
this.router.events.pipe(
filter(event => event instanceof NavigationEnd),
map(() => this.rootRoute(this.route)),
filter((route: ActivatedRoute) => route.outlet === 'primary'),
mergeMap((route: ActivatedRoute) => route.data)
).subscribe((event: {[name: string]: any}) => {
this.titleService.setRouteTitle(event['title']);
});
}

private rootRoute(route: ActivatedRoute): ActivatedRoute {
while (route.firstChild) {
route = route.firstChild;
}
return route;
}

我的应用程序路线如下所示:
{ path: 'login', component: LoginComponent, data: { title: 'Login' } }

而我的标题服务负责设置标题。

我看到的和你的唯一区别是你在构造函数中绑定(bind)到路由器,而我在 ngOnInit 中进行绑定(bind)。 .您可以尝试调用 ngOnInit 中的内容吗? ?我不确定这是否会有所作为,但值得一试。

关于Angular - 在应用程序组件中获取路由数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60269666/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com