Angular 角度-如何;退出“;组件?
假设我有一个需要身份验证的组件(事实上,该组件的某些实例需要身份验证,其他实例不依赖于“id”路由实例变量):Angular 角度-如何;退出“;组件?,angular,angular-routing,Angular,Angular Routing,假设我有一个需要身份验证的组件(事实上,该组件的某些实例需要身份验证,其他实例不依赖于“id”路由实例变量): 问题是我的代码的其余部分总是被执行的(如果这个组件不安全或者用户登录了,这是可以的)。但是当“if”条件为true时(当导航到登录页面时),ngOninit()方法中的其余代码仍会执行。问题在于验证用户会话或身份验证的模式。Angular提出的理想模式是,如果不满足访问条件,则不组装组件 例如: class UserToken {} class Permissions { canA
问题是我的代码的其余部分总是被执行的(如果这个组件不安全或者用户登录了,这是可以的)。但是当“if”条件为true时(当导航到登录页面时),ngOninit()方法中的其余代码仍会执行。问题在于验证用户会话或身份验证的模式。Angular提出的理想模式是,如果不满足访问条件,则不组装组件 例如:
class UserToken {}
class Permissions {
canActivate(user: UserToken, id: string): boolean {
return true;
}
}
@Injectable()
class CanActivateTeam implements CanActivate {
constructor(private permissions: Permissions, private currentUser: UserToken) {}
canActivate(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): Observable<boolean>|Promise<boolean>|boolean {
return this.permissions.canActivate(this.currentUser, route.params.id);
}
}
@NgModule({
imports: [
RouterModule.forRoot([
{
path: 'team/:id',
component: TeamCmp,
canActivate: [CanActivateTeam]
}
])
],
providers: [CanActivateTeam, UserToken, Permissions]
})
class AppModule {}
class UserToken{}
类权限{
canActivate(用户:UserToken,id:string):布尔值{
返回true;
}
}
@可注射()
类CanActivateTeam实现CanActivate{
构造函数(私有权限:权限,私有currentUser:UserToken){}
激活(
路由:ActivatedRouteSnapshot,
状态:RouterStateSnapshot
):可观察的|承诺|布尔值{
返回this.permissions.canActivate(this.currentUser,route.params.id);
}
}
@NGD模块({
进口:[
RouterModule.forRoot([
{
路径:'team/:id',
组成部分:TeamCmp,
canActivate:[CanActivateTeam]
}
])
],
提供者:[CanActivateTeam、UserToken、权限]
})
类AppModule{}
- 更多信息:
- 下面是一个更优雅的例子:
class UserToken {}
class Permissions {
canActivate(user: UserToken, id: string): boolean {
return true;
}
}
@Injectable()
class CanActivateTeam implements CanActivate {
constructor(private permissions: Permissions, private currentUser: UserToken) {}
canActivate(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): Observable<boolean>|Promise<boolean>|boolean {
return this.permissions.canActivate(this.currentUser, route.params.id);
}
}
@NgModule({
imports: [
RouterModule.forRoot([
{
path: 'team/:id',
component: TeamCmp,
canActivate: [CanActivateTeam]
}
])
],
providers: [CanActivateTeam, UserToken, Permissions]
})
class AppModule {}
if(this.isSecured && this.authService.isLoggedIn()) {
// sensitive stuff
} else {
this.router.navigate(['/login']);
}