Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度6:跳过子路由中的父路由解析程序?_Angular - Fatal编程技术网

Angular 角度6:跳过子路由中的父路由解析程序?

Angular 角度6:跳过子路由中的父路由解析程序?,angular,Angular,我正在尝试向我的应用程序添加路由,我有一个带parentResolver的父路由和一个带child Resolver的子路由。当我访问“/parent”时,父解析程序将完全启动 但问题是,当我访问“/parent/child”时,父解析程序会在子解析程序启动之前再次启动。当导航到子页面时,我不想运行父解析程序 那么,在调用子路由时是否有方法跳过父解析程序呢。 这是我的路线配置 { path: 'parent', component: ParentComponent, re

我正在尝试向我的应用程序添加路由,我有一个带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'
               }
             ]
}
  • 签入父解析程序什么是目标路径。(或者如果ActivatedRouteSnapshot有子项)

    }

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


  • 您可以创建我所称的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'
      }
    ]