gpt4 book ai didi

Angular 2 Router Guards订单

转载 作者:太空狗 更新时间:2023-10-29 17:13:21 29 4
gpt4 key购买 nike

Angular 2 router guards 可以在数组中定义。例如:

<code>
canActivate: ['CanAlwaysActivateGuard','AuthGuard']
</code>

以下是我的问题:

  1. 两名 guard 的处决顺序是什么。
  2. 如果我想仅在 CanAlwaysActivateGuard 返回 true 时才执行 AuthGuard,这是否可行。

最佳答案

我遇到了这个问题,在寻找答案时看到了您的帖子。没有找到 - 今天有时间 - 我想出了一个我认为你可能感兴趣的解决方案。我创建了一个“CompositeRouteGuard”:

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

@Injectable()
export class CompositeRouteGuard implements CanActivate {

constructor( protected router: Router,
protected injector: Injector ) {
}

canActivate( route: ActivatedRouteSnapshot, state: RouterStateSnapshot ): Observable<boolean> {
var compositeCanActivateObservable: Observable<boolean> = Observable.of(true);

let routeGuards = route.data.routeGuards;

if(routeGuards){
for( var i = 0; i < routeGuards.length; i++ ){
let routeGuard = this.injector.get(routeGuards[i]);
let canActivateObservable = routeGuard.canActivate(route, state);
compositeCanActivateObservable = compositeCanActivateObservable.flatMap( (bool) => {
if(!bool){
return Observable.of(false);
}
else{
return canActivateObservable;
}
});
}
}

return compositeCanActivateObservable;
}
}

这需要在您的 routes.ts 中进行一些额外的配置。您需要在路由的数据元素中添加一个“routeGuards”数组。

const routes: Routes = [
{
path: '...',
component: AComponent,
data: { routeGuards: [ FooRouteGuard, BarRouteGuard, BazRouteGuard ] },
canActivate: [ CompositeRouteGuard ]
},
...

我只关心 canActivate 操作,但您应该能够轻松扩展它,如果需要,可以说“canDeactivate”(例如)。

现在我的路由守卫使用“和”语义“按顺序”运行(所有都必须成功才能激活路由)。

关于Angular 2 Router Guards订单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45618687/

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