angular - 如何限制角度cli中不需要的路线?
问题描述
我已经使用延迟加载在我的 Angular 8 应用程序中设置了路由模块。我已经设置了多个路由模块。在我的身份验证路由模块中,我为/auth/login
. 但是/login
也重定向到同一个组件。如何限制此路由?
App-routing.module
const routes: Routes = [
{
path: "auth",
loadChildren: "./authentication/authentication.module#AuthenticationModule"
},
{
path: "user",
loadChildren: "./user/user.module#UserModule"
},
{
path: "**",
redirectTo: "auth/login"
}
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
身份验证路由模块
const routes: Routes = [
{
path: "login",
component: LoginPageComponent
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
我希望仅在我去路由时加载登录组件/auth/login
,但是当我去/login
路由而不重定向时它也会加载。
这是关于 stackblitz 的示例项目:https ://stackblitz.com/edit/angular-qor5kr
解决方案
实际上,这是因为您将“所有其他路由”重定向(path: ‘**’)
到auth/login
. 所以问题并不完全在/login
路线上。
如果您只想限制/login
路径 - 为其创建单独的组件。
此外,您可以在路由上放置一个Guardpath: **
并实施适当的重定向。像这样:
// routes
{
path: "**",
redirectTo: "auth/login",
canActivate: [AuthGuard]
}
// Guard
import { Injectable } from '@angular/core';
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
@Injectable({
providedIn: 'root',
})
export class AuthGuard implements CanActivate {
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): boolean {
if (state.url === '/login') {
// Handle redirect here
}
return true;
}
}
更新
在检查了Stackblitz 示例后,我发现了问题所在。您已将延迟加载AuthenticationModule
直接包含到AppModule
模块中。这导致了工件。你应该删除它
@NgModule({
imports: [
BrowserModule,
// AuthenticationModule, <= It's lazy loaded and should not be included
AppRoutingModule
],
declarations: [ AppComponent ],
bootstrap: [ AppComponent ]
})
export class AppModule { }
请参阅此处的更正示例。
推荐阅读
- c# - Remove elements from List A that are in List B while keeping any duplicates in List A
- php - how to show warning of empty field on form validation?
- firebase - How to show just QuerySnapshots with boolean true in ListView? (Dart/Flutter)
- javascript - Asynchronous functions in an else block
- c++ - X11: How to get current top-left corner coordinates in visible area, when panning with mouse?
- postgresql - Why is the range of the timestamp type 4713 BC to 294276 AD?
- docker-compose - Errors while create channel in hyperledger fabric
- reactjs - Register values with useForm and react-select-country-list
- python - Unable to downgrade/uninstall shap (windows)
- flutter - I get this message while run the code which I got it from codecanyon?