繁体   English   中英

Angular 6:在子路由中跳过父路由解析器?

[英]Angular 6: Skip parent route resolver in child route?

我正在尝试向我的应用程序添加路由,并且我有一个带有 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'
      }
    ]
  }

请尝试以下操作:

{
    path: 'parent',
    children: [
               {  path : '',
                  pathMatch : 'full',
                  component: ParentComponent,
                  resolve: {parentData: ParentResolver},
                  runGuardsAndResolvers: 'paramsOrQueryParamsChange',
               },
               {  path: 'child',
                  component: ChildComponent,
                  resolve: {childData: ChildResolver},
                  runGuardsAndResolvers: 'paramsOrQueryParamsChange'
               }
             ]
}
  1. 检查父解析器什么是目标路径。 (或者如果 ActivatedRouteSnapshot 有孩子)

     resolve(route: ActivatedRouteSnapshot) { if (route.children.length) { // target is some child } else { // target is parent }

    }

  2. 创建独立路径:“父/子”

您可以创建我所说的 ResolverGuard,它是充当解析器的 Guard。

{
path: 'parent',
component: ParentComponent,
resolve: [ParentResolver], // simply return an Observable<boolean>
runGuardsAndResolvers: 'paramsOrQueryParamsChange',
children: [
  {
    path: 'child',
    component: ChildComponent,
    canActivate: [ChildResolverGuard],
    runGuardsAndResolvers: 'paramsOrQueryParamsChange'
  }
]

}

然而,这只会在父解析器之前运行子保护。 无论如何,解析器都会运行,但是您可以在 ParentResolver 中添加逻辑以在子 Guard 运行时跳过它。

结帐https://github.com/angular/angular/issues/20805#issuecomment-350106463

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM