angular - 不允许的保护路线的替代路线?
问题描述
在下面的路由器的情况下,是否可以在不允许访问路由或其子路由之一时设置替代路由(/
例如) ?AdalGuard
/int
我知道我可以在警卫类中执行此操作,方法是在其中调用.navigateByUrl()
或返回UrlTree
. 但在这种情况下AdalGuard
来自包'adal-angular4',所以我不能做这样的事情。
是否有类似“Else”或“Catch”指针指向另一条路线的东西,我可以将其放入受保护路线的定义中?
非常感谢。
app-routing.module.ts
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { ExtMainComponent } from './ext/ext-main/ext-main.component';
import { IntMainComponent } from './int/int-main/int-main.component';
import { EmailSenderComponent } from './int/email-sender/email-sender.component';
import { AdalGuard } from 'adal-angular4';
const routes: Routes = [
{path: 'ext', component: ExtMainComponent},
{
path: 'int', component: IntMainComponent, canActivate: [AdalGuard], children: [
{path: 'email', component: EmailSenderComponent}
]
},
{path: '**', redirectTo: '/'}
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule {
}
解决方案
AdalGuard
如果您查看源代码,它本身就很简单。
您可以分叉或扩展它。我会分叉它,以便您可以完全控制功能。
据我所知,userInfo.authenticated
总是返回一个同步布尔值。
import { Injectable } from '@angular/core';
import { Router, UrlTree, ActivatedRouteSnapshot, CanActivate, CanActivateChild, RouterStateSnapshot } from '@angular/router';
import { Observable } from 'rxjs';
import { AdalService } from './adal.service';
@Injectable()
export class MyAdalGuard implements CanActivate, CanActivateChild {
constructor(private adalService: AdalService,
private router: Router
) { }
canActivate(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): boolean | UrlTree {
if (this.adalService.userInfo.authenticated) {
return true;
}
return this.router.parseUrl('/some-url');
}
public canActivateChild(
childRoute: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): boolean | UrlTree {
return this.canActivate(childRoute, state);
}
}
推荐阅读
- javascript - 如何为相同类名的多个部门随机显示不同的背景图像
- python-3.x - 在 Pyomo 中解析 NEOS 解决方案文件时出错
- python - 自动翻页
- algorithm - 计算固定数量地雷随机生成的扫雷地图难度的算法
- sql - Hibernate - 当我想跳过条件时查询变慢
- select - Cesium:选择点时触发事件
- python - 如何重新索引 pandas DataFrame,同时根据新索引对其进行重新采样并聚合其数据?
- ruby-on-rails - Ruby on Rails:与 Rake 相关的任何命令都不起作用
- linux - 如何在 Linux X86_64 中测试英特尔超线程的性能
- css - 如何使我的 css 移动图像元素与较小的屏幕兼容?