Angular 2路由重定向不起作用

时间:2016-11-01 02:42:19

标签: angular angular2-routing

我在app-routing.module中定义了一个重定向,并且没有想法为什么它不起作用。如果我使用默认路径“”(当前已注释掉的代码)而不是重定向,那么它可以正常工作。

@NgModule({
imports: [
    RouterModule.forRoot([
        {
            path: "actions",
            component: ActionsComponent
        },
        //{
        //    path: "",
        //    component: LoginComponent
        //}
        {
            path: "",
            redirectTo: "/login",
            pathMatch: "full"
        }
    ])
],
exports: [
    RouterModule
]

})

有什么想法吗?代码位于http://plnkr.co/edit/y970zDKDZRIZ5LQA8v1T?p=preview

6 个答案:

答案 0 :(得分:1)

在您的复制中,您没有真正的/登录路径,因为第二个路由器插座不知道应该处理登录路由的哪个子节点。

在@Ha Hoang的回答中,如果你在下面发表评论:

{ path: "", redirectTo: "login", pathMatch: "full" }

你的应用仍然有用!因为(路径:"")在login-routing.module中重写:

{ path: '', component: LoginComponent }

但我认为@Ha Hoan的方式不合逻辑,因为路径=""不应该加载LoginComponent它应该重定向到/ login url然后路径="登录"应该加载LoginComponent我的建议是:

在app-routing.module中:使用/ login / loginDetails而不是/ login

{
    path: "",
    redirectTo: "/login/loginDetails",
    pathMatch: "full"
}

然后你的plunker工作正确,路由的结构更好。 http://plnkr.co/edit/YENJ4Wm26qMty5mOR1dA?p=preview

答案 1 :(得分:0)

您应该更改以下内容:

  1. 在app-routing.module.ts中:使用'login'而不是'/ login'

    {      路径:“”,      redirectTo:“登录”,      pathMatch:“full” }

  2. 在app / login / login-routing.module中:

        RouterModule.forChild([
        {
            path: 'login',
            children: [
                { path: "loginDetails", component: LoginDetailsComponent },
                { path: "moreLoginDetails", component: MoreLoginDetailsComponent }
            ]
        },
        { path: '', component: LoginComponent }
        ])  
    
  3. 对我有用!

答案 2 :(得分:0)

要从您的路径中删除/,例如/loginlogin,只需将其添加到index.html

<base href="/">

如果您需要重定向无效的网址,可以使用

{ path: '**', redirectTo: 'login' }

答案 3 :(得分:0)

我无法回复sigit_prayoga的评论,但如果您使用

{ path: '**', redirectTo: 'login' }

然后你需要将放在路线的底部,否则它下面的所有内容都会重定向。

这对我有用。

答案 4 :(得分:0)

我看到的唯一问题是你没有名为'login'的路线。所以路由器首先进入空'' - 路由。在这里,他注意到他必须导航到login路线,但他找不到这样的路线。我认为这应该是解决方案:

RouterModule.forRoot([
    {
        path: "actions",
        component: ActionsComponent
    },
    {
        path: "login",
        component: LoginComponent
    },
    {
        path: "",
        redirectTo: "/login",
        pathMatch: "full"
    }
])

修正了plunker: http://plnkr.co/edit/xvt6RdoQWDFakT12ZNRH?p=preview

答案 5 :(得分:0)

根据Angular 2人@ https://github.com/angular/angular/issues/12133

,这似乎正在按预期工作

基本上错误信息是误导性的,我必须在路线中有一个默认路径。因此,在

中更改login-route.module.ts中的以下内容
            children: [
                { path: "loginDetails", component: LoginDetailsComponent },
                { path: "moreLoginDetails", component: MoreLoginDetailsComponent }
            ]

           children: [
                { path: "loginDetails", component: LoginDetailsComponent },
                { path: "", component: MoreLoginDetailsComponent }
            ]

会解决我的问题。