【问题标题】:Angular2 Routing on lazy-loaded module with multiple named outlets具有多个命名插座的延迟加载模块上的Angular2路由
【发布时间】:2017-06-20 17:09:16
【问题描述】:

我在 Angular2 中遇到了路由问题。

  1. 我的模块是延迟加载的(但到目前为止,基本的“loadChildren”方法没有问题)
  2. 正在加载模块本身(在开发工具的网络选项卡中看到)

我的问题:

请参阅下面的路由代码。第一个版本工作正常。当我创建 routerLink to 时,找到了路由并且没有抛出错误。

但是,为什么我的第一个摘录有效,而第二个却没有???我不想创建一个伪路径“测试”只是为了让它工作。第二个例子是得到这个错误信息。

[...]无法匹配任何路由。 URL 段:'mypath'[...]

工作路线:

children: export const routes: Routes = [
    {
        path: '',
        component: ParentSplitViewComponent,
        children: [
            {
                path: '',
                redirectTo: 'test'
            },
            {
                path: 'test',
                component: SplitViewComponent,
                children: [
                    {
                        path: '',
                        redirectTo: 'list'
                    },
                    {
                        path: 'list',
                        component: MyListComponent,
                        outlet: 'left'
                    },
                    {
                        path: ':id',
                        component: MyDetailComponent,
                        outlet: 'right'
                    }
                ]
            }
        ]
    }
];

路由不工作:

children: export const routes: Routes = [
    {
        path: '',
        component: ParentSplitViewComponent,
        children: [
            {
                path: '',
                component: SplitViewComponent,
                children: [
                    {
                        path: '',
                        redirectTo: 'list'
                    },
                    {
                        path: 'list',
                        component: MyListComponent,
                        outlet: 'left'
                    },
                    {
                        path: ':id',
                        component: MyDetailComponent,
                        outlet: 'right'
                    }
                ]
            }
        ]
    }
];

请不要依赖文件的命名等。我不得不重命名路径等 - 从这个角度来看一切正常。它只是关于路由。

App.routing.ts

{
    path: 'mypath',
    loadChildren: 'app/modules/myModule/my.module#MyModule'
},

延迟加载模块的更大摘录以了解结构:

import [...]    


@Component({
    selector: 'parent-split-view-layout-container',
    template: `
    <h1>Parent</h1>

    <router-outlet></router-outlet>
  `
});
export class ParentSplitViewComponent {}



@Component({
    selector: 'split-view-layout-container',
    template: `
    <h1>Vertical Split View</h1>

    <div id="left">
        <router-outlet name="left"></router-outlet>
    </div>

    <div id="right">
        <router-outlet name="right"></router-outlet>
    </div>
  `
});
export class SplitViewComponent {}




/* Routing Definition */
export const routes: Routes = [
    {
        path: '',
        component: ParentSplitViewComponent,
        children: [
            {
                path: '',
                redirectTo: 'test'
            },
            {
                path: 'test',
                component: SplitViewComponent,
                children: [
                    {
                        path: '',
                        redirectTo: 'list'
                    },
                    {
                        path: 'list',
                        component: MyListComponent,
                        outlet: 'left'
                    },
                    {
                        path: ':id',
                        component: MyDetailComponent,
                        outlet: 'right'
                    }
                ]
            }
        ]
    }
];

export const MyRouting: ModuleWithProviders = RouterModule.forChild(routes);

Angular2 版本:

"@angular/common": "~2.4.5",
"@angular/compiler": "~2.4.5",
"@angular/core": "~2.4.5",
"@angular/forms": "~2.4.5",
"@angular/http": "~2.4.5",
"@angular/material": "^2.0.0-beta.1",
"@angular/platform-browser": "~2.4.5",
"@angular/platform-browser-dynamic": "~2.4.5",
"@angular/router": "~3.4.5",

【问题讨论】:

标签: angular angular2-routing


【解决方案1】:

这是一个已知的错误。
一个月前我举报了https://github.com/angular/angular/issues/13807
它已关闭,因为它与以下内容重复:https://github.com/angular/angular/issues/10981

我也需要这个,但由于问题自 2016 年 8 月 26 日以来已打开,并且“vsavkin 于 2016 年 11 月 16 日删除了他们的任务”,我认为我们不会很快看到修复.

与我可以使用辅助路线完成的相比,我最终得到了一些非常糟糕的结果,但工作必须跟上。我希望我能够为此做出贡献,但我不是......

编辑: (13/06/18)
看来fix 今天已合并!

【讨论】:

  • 谢谢,过去几个小时我一直在努力解决这个问题。让更多人不这样做感到惊讶。
  • 也很惊讶......因此我不得不重新考虑我的应用程序的某些部分,但在 v4.0.0 中仍然没有修复......很遗憾。我什至没有生气,因为它是开源的,我无法自己解决这个问题,但这是一个杀手级功能,延迟加载也很棒。不得不在两者之间做出选择是可悲的
  • 嗨@Maxime 我也面临这个问题,如果你找到任何解决方案请帮助我
  • 嗨@MuhammadArslan,我见过你的comment on the Github issue,但不幸的是,什么都没有......这就像没有人混合延迟加载+辅助路由=/
  • 这个 Angular 版本终于解决了这个错误:11.0.6 (2021-01-06)。我不是 100% 确定提到的 2018 年修复,但在最新版本中,问题似乎真的得到了解决 - 是的。相关的提交是:路由器:应用重定向应该匹配具有空路径父级的命名出口 (#40029) (#40315) (f542e4e),关闭 #38379 #38379 #39952 #10726 #30410 路由器:确保具有空路径父级的命名出口是识别 (#40029) (#40315) (c722c43)
【解决方案2】:

感谢遇到同样问题的一些乐于助人的人,我在这里找到了解决方法。您的问题很可能是您尝试在空路由上使用路由器插座作为孩子。我能够通过将路由命名为静态值并从那里将插座设为子级来解决类似的问题。

正如其他人所说,您可以在此处跟踪问题 - https://github.com/angular/angular/issues/10981

尝试改变

{
  path: '',
  component: SplitViewComponent,
  children: [
    {
      path: '',
      redirectTo: 'list'
    },
    {
      path: 'list',
      component: MyListComponent,
      outlet: 'left'
    },
    {
      path: ':id',
      component: MyDetailComponent,
      outlet: 'right'
    }
  ]
}

{
  path: 'somePath',
  component: SplitViewComponent,
  children: [
    {
      path: '',
      redirectTo: 'list'
    },
    {
      path: 'list',
      component: MyListComponent,
      outlet: 'left'
    },
    {
      path: ':id',
      component: MyDetailComponent,
      outlet: 'right'
    }
  ]
}

【讨论】:

  • 哇,经过长时间的调试,我自己想通了,你的答案是我最终得到的答案。
猜你喜欢
  • 2017-08-21
  • 2021-08-06
  • 1970-01-01
  • 2017-04-07
  • 2019-12-07
  • 2022-07-21
  • 2017-02-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多