我正在尝试将路由添加到我的应用中,并且我有一个使用parentResolver的父路由和一个使用Child Resolver的子路由。当我访问“ / parent”时,父解析器会正常启动。
但是问题是,当我访问'/ parent / child'时,父解析器会在孩子解析器可以启动之前再次启动。我不想在导航到孩子时运行父解析器页。
因此,有一种方法可以在调用子路由时跳过父解析器。 这是我的路线配置
{
path: 'parent',
component: ParentComponent,
resolve: {parentData: ParentResolver},
runGuardsAndResolvers: 'paramsOrQueryParamsChange',
children: [
{
path: 'child',
component: ChildComponent,
resolve: {childData: ChildResolver},
runGuardsAndResolvers: 'paramsOrQueryParamsChange'
}
]
}
答案 0 :(得分:1)
尝试以下操作:
{
path: 'parent',
children: [
{ path : '',
pathMatch : 'full',
component: ParentComponent,
resolve: {parentData: ParentResolver},
runGuardsAndResolvers: 'paramsOrQueryParamsChange',
},
{ path: 'child',
component: ChildComponent,
resolve: {childData: ChildResolver},
runGuardsAndResolvers: 'paramsOrQueryParamsChange'
}
]
}
答案 1 :(得分:1)
在父解析器中检查什么是目标路径。 (或者如果ActivatedRouteSnapshot有子级)
resolve(route: ActivatedRouteSnapshot) {
if (route.children.length) {
// target is some child
} else {
// target is parent
}
}
创建独立路径:“父/子”
答案 2 :(得分:0)
您可以创建我称为ResolverGuard的功能,它是充当Resolver的Guard。
{
path: 'parent',
component: ParentComponent,
resolve: [ParentResolver], // simply return an Observable<boolean>
runGuardsAndResolvers: 'paramsOrQueryParamsChange',
children: [
{
path: 'child',
component: ChildComponent,
canActivate: [ChildResolverGuard],
runGuardsAndResolvers: 'paramsOrQueryParamsChange'
}
]
}
但是,这只会在父解析器之前运行子级守护程序。解析器无论如何都会运行,但是如果运行了子级Guard,则可以在ParentResolver中添加逻辑以跳过该逻辑。
结帐https://github.com/angular/angular/issues/20805#issuecomment-350106463