角度6:在子路径中跳过父路径解析器?

时间:2018-09-17 07:05:43

标签: angular

我正在尝试将路由添加到我的应用中,并且我有一个使用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'
      }
    ]
  }

3 个答案:

答案 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)

  1. 在父解析器中检查什么是目标路径。 (或者如果ActivatedRouteSnapshot有子级)

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

    }

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

答案 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