【问题标题】:Rendering a child route in the parent in Angular 4在Angular 4的父级中渲染子路由
【发布时间】:2018-01-04 22:26:14
【问题描述】:

使用 Angular 2,我可以通过定义一个空的 path 并创建一个基本上为空的基础组件来使子路由“覆盖”其父级。我正在尝试使用新的 Angular 路由器(4.3.1 版)完成类似的任务,但遇到了障碍。

为了重现我的问题,here's a Plunker. 路由定义为:

[{
    path: '',
    redirectTo: "/master",
    pathMatch: "full"
}, {
    path: 'master',
    component: MasterComponent,
    children: [{
        path: 'detail/:value',
        component: DetailComponent,
        children: [{
            path: 'subdetail',
            component: SubDetailComponent
        }]
    }]
}]

当我导航到详细信息页面时,母版页仍然可见,因为我已将 <router-outlet></router-outlet> 添加到 MasterComponent。我需要的是用细节替换主视图。我可以通过使detail/:value 成为master兄弟而不是孩子来实现这一点,但这在我的应用程序中逻辑上不正确,并且会破坏我的面包屑。

是否有任何适当的方法来处理这种模式,或者我必须选择一种解决方法,例如showing and hiding the intended routemanually specifying a dedicated "main" outlet for every link

现有的唯一接近的解决方案是define a dummy parent component,但这仅适用于下一级。如果我的详细信息页面有另一个子详细信息页面也应该替换主页面,它会变得非常混乱。

我可以设置任何路由级别的标志或设计模式来实现优雅地完成此任务吗?我是 Angular 2 的初学者,但我觉得这样的事情应该很简单。

【问题讨论】:

    标签: javascript angular routing


    【解决方案1】:

    首先,4.3.1 中没有“新”路由器。与 2.x 中的路由器相同。

    其次,我需要对您的 plunker 进行一些更改,以使其正常工作。 master.component.ts 中的关键变化是:

    <a [routerLink]="['/detail', 5]">
    

    我添加了一个斜线。没有斜线,它正在寻找一条名为master/detail/5的路由

    路由定义现在是扁平的,所以所有内容都将显示在您的主标题“下方”。

    export const routes: Routes = [
      {
        path: '',
        redirectTo: 'master',
        pathMatch: 'full'
      },
      {
        path: 'master',
        component: MasterComponent
      },
      {
        path: 'detail/:value',
        component: DetailComponent
      }
    ];
    

    更新的 plunker 在这里:https://plnkr.co/edit/EHehUR6qSi248vQPDntt?p=preview

    【讨论】:

    • 嗨,DeborahK,谢谢!我希望我不必弄平我的路线,因为这会破坏面包屑。没有其他方法可以强制在基础级别渲染路线吗?
    • 你们是如何实现面包屑的?如果您希望新内容完全替换旧内容,那么它就不能是没有一堆麻烦的子路由。但如果面包屑实现正在读取完整的 URL,您可能会将路径设置为 master/detail/:value
    • 我正在使用 this technique 的修改版本,它只是通过每个活动路由递归。拥有可操作的面包屑绝对是正确显示页面的次要目标。
    • 您阅读讨论区的第一条评论了吗?看起来其他几个开发人员正在尝试做同样的事情。最后一个人提出了解决方案。
    • 老实说,因为 cmets 通常不是很好的信息来源(当然这两种情况除外),所以我完全跳过了它们。看起来有些人对这个问题有一些很好的解决方案;感谢您指出了这一点。我不确定谁对你的答案投了反对票,但它回答了我的问题并修复了我的路线。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2017-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-15
    • 1970-01-01
    相关资源
    最近更新 更多