多次调用angular2路线防护

问题描述 投票:4回答:2

我在我的一条私人路线上有一个路线守卫,当守卫返回假时,它不再被召唤。 以下示例简化了如何重现这种情况。

当用户使用链接导航时:

<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 Do you want to login? YES/NO 。 当用户点击no我想留在页面上。 但当他决定再次导航时,我想让他再次登录。

有没有办法阻止angular2缓存保护结果?

angular angular2-routing angular2-guards
2个回答
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:

https://plnkr.co/edit/2A0Wfu?p=preview


2
投票

我遇到了同样的问题。 看起来可以在4.x中覆盖行为:

https://angular.io/api/router/Routes

检查runGuardsAndResolvers路由参数。

我也错误地认为值“always”将用于路由器3.4.x.

© www.soinside.com 2019 - 2024. All rights reserved.