多次调用angular2路由守卫
Calling angular2 route guard multiple times
我在我的一条私人路线上有一个路线守卫,当守卫 return 为 false 时,它不再被调用。以下示例简化了如何重现这种情况。
当用户使用 link 导航时:
<a [routerLink]="['my-private-route']">Link</a>
警卫被呼叫,我在控制台中看到 called
消息并且导航被取消(我在警卫中 return false
):
@Injectable()
export class CanActivateViaAuthGuard implements CanActivate {
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean>|Promise<boolean>|boolean {
console.log('called')
return false;
}
}
但是当用户再次点击 link 时没有任何反应。
为什么我需要这样的行为? 我需要重复调用 guard 的原因是因为我必须显示模式 Do you want to login? YES/NO
。当用户点击 no
我想留在页面上。但是当他后来决定再次导航时,我想让他再次登录。
有什么方法可以阻止 angular2 缓存保护结果吗?
经过@GünterZöchbauer 的一些调查和帮助,这是 angular 路由器 3.2.0 的一个奇怪行为。已经有类似的问题:https://github.com/angular/angular/issues/12851
Here is plunker with 3.1.2 where guard is evaluated every time:
https://plnkr.co/edit/jUhVJY?p=preview
Here is plunker with 3.2.0 where guard is evaluated only once:
我运行进入同样的问题。看起来可以在 4.x:
中覆盖该行为
https://angular.io/api/router/Routes
检查 runGuardsAndResolvers 路由参数。
我还错误地假设值 "always" 将用于路由器 3。4.x
我在我的一条私人路线上有一个路线守卫,当守卫 return 为 false 时,它不再被调用。以下示例简化了如何重现这种情况。
当用户使用 link 导航时:
<a [routerLink]="['my-private-route']">Link</a>
警卫被呼叫,我在控制台中看到 called
消息并且导航被取消(我在警卫中 return false
):
@Injectable()
export class CanActivateViaAuthGuard implements CanActivate {
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean>|Promise<boolean>|boolean {
console.log('called')
return false;
}
}
但是当用户再次点击 link 时没有任何反应。
为什么我需要这样的行为? 我需要重复调用 guard 的原因是因为我必须显示模式 Do you want to login? YES/NO
。当用户点击 no
我想留在页面上。但是当他后来决定再次导航时,我想让他再次登录。
有什么方法可以阻止 angular2 缓存保护结果吗?
经过@GünterZöchbauer 的一些调查和帮助,这是 angular 路由器 3.2.0 的一个奇怪行为。已经有类似的问题:https://github.com/angular/angular/issues/12851
Here is plunker with 3.1.2 where guard is evaluated every time:
https://plnkr.co/edit/jUhVJY?p=preview
Here is plunker with 3.2.0 where guard is evaluated only once:
我运行进入同样的问题。看起来可以在 4.x:
中覆盖该行为https://angular.io/api/router/Routes
检查 runGuardsAndResolvers 路由参数。
我还错误地假设值 "always" 将用于路由器 3。4.x