从一个子路由路由到另一个子路由然后返回到第一个子路由

时间:2017-03-28 11:44:15

标签: angular angular2-routing

在我的应用程序中,有一种情况我想从'createcontrol'路由路由到'createform'路由(这是'createcontrol'的兄弟)。这按预期工作,并加载'createform'屏幕。 现在,如果满足某个条件,我想路由到'createcontrol'路线,但这不起作用。仅当'createform'路由从'createcontrol'路由时才会发生这种情况。

是否存在一些问题,您将路由回到最初路由您的兄弟姐妹? 这是我对路线的定义

this._router.navigateByUrl('/projects/learningconsole/(r1:createcontrol)');

另请注意,我在控制台中没有出现任何错误。屏幕保持不变,即使网址没有改变,也不会像我期望的那样指示r1:createcontrol。

以下是我的路由到创建控制屏幕的代码:

{{1}}

我认为问题不在于任何组件,因为我最初能够毫无问题地路由到createcontrol屏幕。

用简单的词汇总结: 考虑有3个兄弟路线A,B,C。 从C到A的路由工作。 从A到B的路由工作。 只有从A到B的路由到A不起作用。

1 个答案:

答案 0 :(得分:0)

您的路线的相对性可能存在问题。从本质上讲,路由的第一次尝试可能是从您的出口外部发生的。发送给兄弟姐妹的兄弟是从插座内部发生的,因此您不需要指定父路由'projects/learningconsole'。试试这个(仅适用于兄弟姐妹):

this._router.navigateByUrl('(r1:createcontrol)');

如果这不起作用,另一个可能的解决方案是指定相对性(你可能需要调整它,因为我没有你的组件的完整图片):

this._router.navigateByUrl('(r1:createcontrol)', { relativeTo: this.routeParams });

这种替代方法需要您注入ActivatedRoute

constructor(
        private routeParams: ActivatedRoute,

<强>更新

可能有第三种解决方案需要较少的路由知识。然而,这显然是不太理想的方法。我无法谈论此解决方案的功效,因为您没有提供有关项目结构的详细信息。尝试将您的路线更新为我在下面的位置:

[{ 
    path: 'projects/learningconsole', 
    component: LearningConsoleComponent
 },
 { path: 'projects/learningconsole/createdocument', component: CreateDocumentComponent, outlet: 'r1' },
 { path: 'projects/learningconsole/createform', component: CreateFormComponent, outlet: 'r1' },
 { path: 'projects/learningconsole/editform', component: EditFormComponent, outlet: 'r1' },
 { path: 'projects/learningconsole/createcontrol', component: CreateControlComponent, outlet: 'r1' }
]