我的一条私人路线上有一个路线守卫,当守卫返回false时,它不会再被召唤。以下示例简化了如何重现这种情况。
当用户使用链接导航时:
<a [routerLink]="['my-private-route']">Link</a>
警卫被调用,我在控制台中看到called
消息,导航被取消(我在警卫中返回false
):
@Injectable()
export class CanActivateViaAuthGuard implements CanActivate {
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean>|Promise<boolean>|boolean {
console.log('called')
return false;
}
}
然而,当用户再次点击链接时,没有任何反应。
为什么我需要这样的行为?我需要重复调用后卫的原因是因为我必须显示模态Do you want to login? YES/NO
。当用户点击no
时,我想留在页面上。但当他决定再次导航时,我想让他再次登录。
有没有办法停止angular2缓存保护结果?
答案 0 :(得分:4)
经过@GünterZöchbauer的一些调查和帮助后,这是角度路由器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:
答案 1 :(得分:2)
我遇到了同样的问题。看起来可以在4.x:
中覆盖行为https://angular.io/api/router/Routes
检查 runGuardsAndResolvers 路由参数。
我也错误地认为价值&#34;总是&#34;将用于路由器3.4.x