Angular2 在页面处于事件状态时触发 CanActivate

标签 angular angular2-routing

据我了解CanActivate Angular2 中的接口(interface)仅对路由更改有效。因此,如果我有一个要求用户登录的页面 p,我可以创建一个实现 CanActivate 接口(interface)的守卫,这将允许 RouterModule仅在用户登录时激活p

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

最佳答案

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

类似下面,

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

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

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

     // redirect to login page

  }
}

关于Angular2 在页面处于事件状态时触发 CanActivate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46812955/

相关文章:

angular - 在带有路由的模块中导入带有路由的延迟加载模块会中断路由

Angular:如何通过控制台获取组件依赖关系?

angular2-routing - 如何在 Bootstrap 中动态提供路由?

javascript - Angular 2+路由redirectTo作为一个函数

angular - 在单个 Angular 应用程序中路由多个项目

angular - 如何使用文件上传选项在 angular2 中制作简单的自定义拖放功能

html - 将鼠标悬停在侧边导航中的 mat-item 上时,工具提示不起作用

javascript - 如何在 angular 2 中再次调用 ngAfterViewInit 中的代码

Angular 2路由器在打开组件之前解析服务器请求

javascript - 我如何发送 CSRF token