Angular 角度6:跳过子路由中的父路由解析程序?
我正在尝试向我的应用程序添加路由,我有一个带parentResolver的父路由和一个带child Resolver的子路由。当我访问“/parent”时,父解析程序将完全启动 但问题是,当我访问“/parent/child”时,父解析程序会在子解析程序启动之前再次启动。当导航到子页面时,我不想运行父解析程序 那么,在调用子路由时是否有方法跳过父解析程序呢。 这是我的路线配置Angular 角度6:跳过子路由中的父路由解析程序?,angular,Angular,我正在尝试向我的应用程序添加路由,我有一个带parentResolver的父路由和一个带child Resolver的子路由。当我访问“/parent”时,父解析程序将完全启动 但问题是,当我访问“/parent/child”时,父解析程序会在子解析程序启动之前再次启动。当导航到子页面时,我不想运行父解析程序 那么,在调用子路由时是否有方法跳过父解析程序呢。 这是我的路线配置 { path: 'parent', component: ParentComponent, re
{
path: 'parent',
component: ParentComponent,
resolve: {parentData: ParentResolver},
runGuardsAndResolvers: 'paramsOrQueryParamsChange',
children: [
{
path: 'child',
component: ChildComponent,
resolve: {childData: ChildResolver},
runGuardsAndResolvers: 'paramsOrQueryParamsChange'
}
]
}
请尝试以下操作:
{
path: 'parent',
children: [
{ path : '',
pathMatch : 'full',
component: ParentComponent,
resolve: {parentData: ParentResolver},
runGuardsAndResolvers: 'paramsOrQueryParamsChange',
},
{ path: 'child',
component: ChildComponent,
resolve: {childData: ChildResolver},
runGuardsAndResolvers: 'paramsOrQueryParamsChange'
}
]
}
您可以创建我所称的ResolverGuard,它是一个充当解析器的保护
{
path: 'parent',
component: ParentComponent,
resolve: [ParentResolver], // simply return an Observable<boolean>
runGuardsAndResolvers: 'paramsOrQueryParamsChange',
children: [
{
path: 'child',
component: ChildComponent,
canActivate: [ChildResolverGuard],
runGuardsAndResolvers: 'paramsOrQueryParamsChange'
}
]
{
路径:'父',
组件:父组件,
resolve:[ParentResolver],//只返回一个可观察的
Runguard和Resolver:'paramsOrQueryParamsChange',
儿童:[
{
路径:'子',
组件:ChildComponent,
canActivate:[ChildResolverGuard],
Runguard和Resolver:'paramsOrQueryParamsChange'
}
]
}
但是,这将只是在父解析程序之前运行子保护。不管如何,解析程序都将运行,但是如果子保护运行,您可以在ParentResolver中添加逻辑以跳过它
签出您也可以定义路由而不使用解析器。我正在使用解析器。用于父路由和子路由。因此,如果url为/parent?someparam=somevalue,则父解析程序将使用queryparam。同样的情况也应该发生在儿童解析器上。这就是我告诉你不用它也可以做的。我可以共享路由代码,您可以在其中定义路由,而无需使用them@Exterminator我明白这件事不必担心。但是我需要解析程序。如果孩子在场时行为发生变化,那么你的
ParentComponent
可能不是真正的家长。因此,您可以将其分为通常需要的部分(不带冲突解决程序的父路由)和仅当不存在子路由时需要的部分(带冲突解决程序的新路由)。尝试了此操作。但是子组件会覆盖路由器出口中的父组件。请检查更新的答案。我为父路径添加了一个pathMatch:“full”
,我尝试了第一种方法,但问题是子组件会覆盖路由器出口中的父路径。我想让孩子在家长的路由器出口中显示paren是否有自己的路由器出口
?我想没有人理解你的问题,你能提供一个在线的例子吗?(stackblitz)是的,本例中的父项是app root的子项。它有自己的路由器出口。子组件应显示在父路由器出口中。我要试着做一个扑通。
{
path: 'parent',
component: ParentComponent,
resolve: [ParentResolver], // simply return an Observable<boolean>
runGuardsAndResolvers: 'paramsOrQueryParamsChange',
children: [
{
path: 'child',
component: ChildComponent,
canActivate: [ChildResolverGuard],
runGuardsAndResolvers: 'paramsOrQueryParamsChange'
}
]