当页面处于活动状态时,Angular2触发器CanActivate

时间:2017-10-18 14:44:44

标签: angular angular2-routing

据我了解,Angular2中的CanActivate接口仅对路由更改有效。因此,如果我有一个要求用户登录的页面 p ,我可以创建一个实现CanActivate接口的防护,允许RouterModule激活 p 仅当用户已登录时。

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

1 个答案:

答案 0 :(得分:3)

您可以在路线中添加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

  }
}

希望这会有所帮助!!