首页 文章

延迟加载嵌套模块和路由

提问于
浏览
0

我在延迟加载的模块中遇到路由问题 .

这是我的“根”路线:

const routes: Routes = [
  {path: '', redirectTo: 'admin', pathMatch: 'full' },
    {path: 'admin', loadChildren: 'app/admin.module#AdminModule'}
];

@NgModule({
  imports: [
      RouterModule.forRoot(routes)
  ],
  exports: [
      RouterModule
  ]
})
export class MainRoutingModule {}

所以我期望从我的应用程序,是将空路径重定向到 /admin - 这工作正常,模块已加载 .

在AdminModule中我得到了另一个重定向:

const routes: Routes = [
    {path: '', component: AdminComponent, children: [
        {path: '', redirectTo: 'app', pathMatch: 'full' },
        {path: 'app', loadChildren: './app/app.module#AppModule', canActivate: [ AuthGuard ] },
        {path: 'login', component: LoginComponent}
    ]},
];

@NgModule({
    imports: [
        RouterModule.forChild(routes),
        AppModule
    ],
    exports: [
        RouterModule
    ]
})
export class AdminRoutingModule {}

在这里,我有两个场景:

  • 如果用户通过身份验证重定向到 app - 那么整个路径将是 /admin/app

  • 否则重定向到 login - 所以整个路径应该是 /admin/login

最后在管理应用程序中路由:

const routes: Routes = [
  { path: '', component: AppComponent, children: [
    { path: '',  redirectTo: 'home', pathMatch: 'full' },
    { path: 'home', component: HomeComponent},
  ]}
];

现在问题开始了 . 如果我将使用url localhost:3000/admin/app/(*) 进入我的身边,一切都按预期工作,调用AuthGuard,url就可以,如果用户未经身份验证,他将重定向到登录页面 .

但是!:如果我输入 localhost:3000 app将我重定向到 localhost:3000/admin/home (缺少 app )并且不调用AuthGuard . 看起来Angular正在省略 admin-routing.module 并直接转到最后一个 .

是什么原因?我该如何解决这个问题?

1 回答

  • 0

    在AdminModule中您可以在默认路由中添加canActivate .

    const routes: Routes = [
        {path: '', component: AdminComponent, children: [
            {path: '', redirectTo: 'app', pathMatch: 'full'  canActivate: [ AuthGuard ]},
            {path: 'app', loadChildren: './app/app.module#AppModule', canActivate: [ AuthGuard ] },
            {path: 'login', component: LoginComponent}
        ]},
    ];
    

相关问题