对我的功能使用Angular 4的路由和单独的文件/模块,我试图让我的应用程序始终首先显示登录屏幕,然后在用户登录后切换到我的主视图(所有路径)受到身份验证的保护,除了登录之外)。
我在Plunker中创建了一个测试应用程序,在应用程序中有关于我需要的功能的注释,而不是目前正在发生的事情: https://plnkr.co/edit/MGIGH4xpKZOtgCBl5lam
我在大多数示例代码(like this one)中遇到的问题是,登录后路由到的组件没有任何嵌套视图。我通过将所有路由放在一个文件中来使我的应用程序工作,但我更喜欢拆分每个功能的路由。然而,一旦我这样做,事情开始变得不稳定:
我认为这个问题可能与我做延迟加载的方式有关吗?
const routes: Routes = [
{ path: '', component: MainNavComponent,
canActivate: [AuthGuard],
children: [
{ path: 'club', loadChildren: 'app/club.module#ClubModule'},
{ path: 'members', loadChildren: 'app/members.module#MembersModule'},
{ path: '', redirectTo: 'club', pathMatch: 'full' }
]
}
];
我按照angular.io路由文档和these suggestions来使其工作正常,但我无法弄清楚最后一点是搞砸了。我真的很感激任何帮助!
答案 0 :(得分:8)
我解决了各种问题,并将其添加到下面的演示中。
@NgModule({
declarations: [
AppComponent,
PageNotFoundComponent
],
imports: [
BrowserModule,
AuthModule,
// ClubModule,
// MainNavModule,
// MembersModule,
AppRoutingModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
// club-routing.module.ts
const routes: Routes = [
{ path: '', component: ClubComponent }
];
// members-routing.module.ts
const routes: Routes = [
{
path: '',
component: MembersComponent,
canActivate: [AuthGuard],
children: [
{ path: ':id', component: MemberDetailComponent }
]
}
];
// app-routing.module.ts
const routes: Routes = [
{ path: '', loadChildren: 'app/main-nav.module#MainNavModule' },
{ path: 'login', component: LoginComponent },
{ path: '**', component: PageNotFoundComponent }
];