angular 中的路线加载
Routes loading in angular
我正在尝试在 Angular12 中实施路由策略。路径的层次结构如下:
\
\app
\app\main
\app\infos
\auth
\auth\signup
\auth\signin
每个根路径的唯一目标是重定向到某个部分的主页(\ 重定向到 \app,\app 重定向到 \app\main 等等)。
以下您可以找到模块和路由器模块配置:
\ app-routing.module
const routes: Routes = [
{path: '', pathMatch: 'full', redirectTo: '/app'},
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
\ logged-routing.module
const routes: Routes = [
{path: 'app', pathMatch: 'full', redirectTo: 'app/main'},
{path: 'app/main', component: MainComponent, canActivate: [AuthGuard]},
{path: 'app/infos', component: InfosComponent, canActivate: [AuthGuard]}
];
@NgModule({
declarations: [],
imports: [
CommonModule,
RouterModule.forChild(routes)
],
exports: [RouterModule]
})
\ auth-routing.module
const routes: Routes = [
{path: 'auth', redirectTo: 'auth/signup'},
{path: 'auth/signup', component: SignupComponent},
{path: 'auth/signin', component: SigninComponent}
];
@NgModule({
declarations: [],
imports: [
CommonModule,
RouterModule.forChild(routes)
],
exports: [RouterModule]
})
\ app.module
@NgModule({
declarations: [
AppComponent,
],
imports: [
BrowserModule,
AppRoutingModule,
AuthModule,
LoggedModule
],
providers: [],
bootstrap: [AppComponent]
})
\ logged-module
@NgModule({
declarations: [
MainComponent,
SyncingStatusComponent,
InfosComponent
],
imports: [
CommonModule,
LoggedRoutingModule,
]
})
\ auth-module
@NgModule({
declarations: [
SignupComponent,
SigninComponent,
AuthComponent,
],
imports: [
CommonModule,
AuthRoutingModule
],
exports: []
})
这里是问题:当我 运行 应用程序 (ng serve) 时,它在控制台中显示错误:Error: Uncaught (in promise): Error: Cannot match any routes: 'app'
。如果我从 redirectTo 属性 (redirectTo: '/app' to redirectTo: 'app') 中删除斜杠,则不会显示错误,但不会执行重定向。另一方面,如果我在 URL 中手动输入 /app 或 /auth 一切正常。目前从 / 重定向到 /app 的唯一方法是在 appComponent 的构造函数中添加:this.router.navigate(["/app"]);
。为什么应用程序路由中的 redirectTo 不起作用?我是否遗漏了有关如何从 RoutingModule 注册路由的信息??
显然这种行为是设计使然
After you redirect to a an absolute path, local redirects are not honored after the redirect.
一个有趣的解释可以在下面找到Chaining Absolute And Local Redirects With The Router In Angular 7.2.13
要避免这个问题,您可以简单地为应用程序创建一个组件,然后重定向到 main。另一种选择是简单地重定向一次 redirectTo: 'app/main'
(See this here)
我正在尝试在 Angular12 中实施路由策略。路径的层次结构如下:
\
\app
\app\main
\app\infos
\auth
\auth\signup
\auth\signin
每个根路径的唯一目标是重定向到某个部分的主页(\ 重定向到 \app,\app 重定向到 \app\main 等等)。
以下您可以找到模块和路由器模块配置:
\ app-routing.module
const routes: Routes = [
{path: '', pathMatch: 'full', redirectTo: '/app'},
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
\ logged-routing.module
const routes: Routes = [
{path: 'app', pathMatch: 'full', redirectTo: 'app/main'},
{path: 'app/main', component: MainComponent, canActivate: [AuthGuard]},
{path: 'app/infos', component: InfosComponent, canActivate: [AuthGuard]}
];
@NgModule({
declarations: [],
imports: [
CommonModule,
RouterModule.forChild(routes)
],
exports: [RouterModule]
})
\ auth-routing.module
const routes: Routes = [
{path: 'auth', redirectTo: 'auth/signup'},
{path: 'auth/signup', component: SignupComponent},
{path: 'auth/signin', component: SigninComponent}
];
@NgModule({
declarations: [],
imports: [
CommonModule,
RouterModule.forChild(routes)
],
exports: [RouterModule]
})
\ app.module
@NgModule({
declarations: [
AppComponent,
],
imports: [
BrowserModule,
AppRoutingModule,
AuthModule,
LoggedModule
],
providers: [],
bootstrap: [AppComponent]
})
\ logged-module
@NgModule({
declarations: [
MainComponent,
SyncingStatusComponent,
InfosComponent
],
imports: [
CommonModule,
LoggedRoutingModule,
]
})
\ auth-module
@NgModule({
declarations: [
SignupComponent,
SigninComponent,
AuthComponent,
],
imports: [
CommonModule,
AuthRoutingModule
],
exports: []
})
这里是问题:当我 运行 应用程序 (ng serve) 时,它在控制台中显示错误:Error: Uncaught (in promise): Error: Cannot match any routes: 'app'
。如果我从 redirectTo 属性 (redirectTo: '/app' to redirectTo: 'app') 中删除斜杠,则不会显示错误,但不会执行重定向。另一方面,如果我在 URL 中手动输入 /app 或 /auth 一切正常。目前从 / 重定向到 /app 的唯一方法是在 appComponent 的构造函数中添加:this.router.navigate(["/app"]);
。为什么应用程序路由中的 redirectTo 不起作用?我是否遗漏了有关如何从 RoutingModule 注册路由的信息??
显然这种行为是设计使然
After you redirect to a an absolute path, local redirects are not honored after the redirect.
一个有趣的解释可以在下面找到Chaining Absolute And Local Redirects With The Router In Angular 7.2.13
要避免这个问题,您可以简单地为应用程序创建一个组件,然后重定向到 main。另一种选择是简单地重定向一次 redirectTo: 'app/main'
(See this here)