Angular2 在页面处于活动状态时触发 CanActivate

Angular2 trigger CanActivate while page is active

据我了解 CanActivate interface in Angular2 is only effective on route changes. So if I have a page p that requires the user to be logged in I can create a guard that implements the CanActivate interface which will allow the RouterModule 仅当用户登录时才激活 p

但是当 p 处于活动状态并且用户被注销时会发生什么?我试图找到最佳实践来检查是否允许在不更改 RouterModule 中的路由的情况下激活页面,但我找不到任何有用的东西。假设页面 p 处于活动状态并且需要登录。现在,当 p 处于活动状态时以某种方式触发注销,但不涉及路由更改。假设服务器响应 401 并且应用程序通知用户不再登录。检查活动页面是否需要登录并采取相应措施的最佳做法是什么?可能是活动页面不需要登录。在那种情况下,一切都应该保持原样。

您可以在路由中添加 data,稍后您可以使用它来检查该路由是否需要身份验证,

如下所示,

{
  path: ..., 
  component: ..., 
  canActivate: [CanActivateGuard], 
  data: { authRequired: true }
}

在注销触发器中,您可以注入 ActivatedRoute 来检查激活的路由数据,以确定是否要将用户发送到登录页面,

constructor(route: ActivatedRoute) {}
...
someCallBack(){
  if(!!this.route.snapshot.data 
     && this.route.snapshot.data.authRequired == true){

     // redirect to login page

  }
}