gpt4 book ai didi

Angular2 条件路由

转载 作者:太空狗 更新时间:2023-10-29 16:49:43 24 4
gpt4 key购买 nike

这可能是一个基本问题,但是在 Angular2 中有什么方法可以进行条件路由吗?或者,有人会在路由器外这样做吗?

我知道 ui-router 有一些能力可以做到这一点,但我在 Angular2s router 中没有看到任何类似的东西

最佳答案

如前所述,Angular Route Guards是实现条件路由的好方法。由于 Angular 教程在这个主题上有点冗长,这里是一个简短的总结如何通过示例使用它们。

1. 守卫有几种类型。如果您需要逻辑 if (loggedIn) {go to "/dashboard"} else { go to "/login"},那么您正在寻找的是 CanActivate-守卫。 CanActivate 可以理解为“如果满足所有条件 Y,则可以激活新路由 X”。您还可以定义重定向等副作用。如果这不符合您的逻辑,请查看 Angular 教程页面以查看其他守卫类型。

2. 创建一个 auth-guard.service.ts

3. 使用以下代码填充 auth-guard.service.ts:

import { Injectable } from '@angular/core';
import {CanActivate, Router, RouterStateSnapshot, ActivatedRouteSnapshot} from '@angular/router';

@Injectable()
export class AuthGuardService implements CanActivate {

constructor(
private router: Router
) {}

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
const isLoggedIn = false; // ... your login logic here
if (isLoggedIn) {
return true;
} else {
this.router.navigate(['/login']);
return false;
}
}

}

4. 在您的路由模块中注册 auth-guard.service.ts。此外,将键值对 canActivate:[AuthGuardService] 添加到您要保护的所有路由。它应该看起来像这样:

const appRoutes: Routes = [
{ path: '', component: LandingComponent},
{ path: 'login', component: LoginComponent},
{ path: 'signup', component: SignUpComponent},
{ path: 'home', component: HomeComponent, canActivate: [AuthGuardService]},
{ path: 'admin', component: AdminComponent, canActivate: [AuthGuardService]},
{ path: '**', component: PageNotFoundComponent }
];

@NgModule({
imports: [
RouterModule.forRoot(appRoutes)
],
exports: [
RouterModule
],
providers: [
AuthGuardService
]
})
export class AppRoutingModule { }

这应该让你开始。

这是一个简约的演示:https://stackblitz.com/edit/angular-conditional-routing

关于Angular2 条件路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34660263/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com