首页前端开发JavaScriptAngular学习之路由守卫(Route Guards)浅析

Angular学习之路由守卫(Route Guards)浅析

时间2024-01-30 16:14:02发布访客分类JavaScript浏览322
导读:收集整理的这篇文章主要介绍了Angular学习之路由守卫(Route Guards)浅析,觉得挺不错的,现在分享给大家,也给大家做个参考。本篇文章带大家了解一下Angular中的路由守卫(Route Guards),介绍一下创建路由守卫、控...
收集整理的这篇文章主要介绍了Angular学习之路由守卫(Route Guards)浅析,觉得挺不错的,现在分享给大家,也给大家做个参考。本篇文章带大家了解一下Angular中的路由守卫(Route Guards),介绍一下创建路由守卫、控制路由是否可以激活、控制路由是否退出的方法,希望对大家有所帮助!

环境:

  • Angular cli: 11.0.6

  • Angular: 11.0.7

  • Node: 12.18.3

  • npm : 6.14.6

  • IDE: Visual Studio Code

在我们的实际的业务开发过程中,我们经常会遇到如下需求:

  • 需要限制某些 URL 的可访问性,例如,对于系统管理界面,只有那些拥有管理员权限的用户才能打开。【相关教程推荐:《angular教程》】

  • 当用户处于编辑界面时,在没有保存就离开时,需要提示用户是否放弃修改。

针对以上场景,Angualr使用路由守卫(Route Guards)来实现。

路由守卫(Route Guards)

1. 创建路由守卫

Angular CLI提供了命令行工具,可以快速创建路由守卫框架文件:ng generate guard auth。 执行后,Angular CLI会问我们需要实现哪些接口,我们直接勾选即可:

? which interfaces would you like to implement? (Press space>
     to select, a>
     to toggle all, i>
     to invert selection)>
    (*) CanActivate ( ) CanActivateChild ( ) CanDeactivate ( ) CanLoad

说明:

  • CanActivate: 控制路由是否可以激活

  • CanActivateChild: 控制子路由是否可以激活

  • CanDeactivate: 控制路由是否可以退出

  • CanLoad: 控制模块(module)是否可以被加载

比较经常使用的是1、3,分别控制进入和退出。 按照上面配置,AngularCLI自动生成如下代码,return true; 替换为我们实际的代码即可。return false; 表示不允许跳转,或者取消离开当前页面。

// auth.guard.tsimport {
 Injectable }
     @R_406_2150@ '@angular/core';
import {
 CanActivate, CanDeactivate, ActivatedRouteSnapshot, RouterstateSnapshot, UrlTree }
     from '@angular/router';
import {
 Observable }
     from 'RxJS';
@Injectable({
  PRovidedIn: 'root'}
    )export class AuthGuard implements CanActivate, CanDeactivateunknown>
 {
      canActivate(    route: ActivatedRouteSnapshot,    state: RouterStateSnapshot): Observableboolean | UrlTree>
     | Promiseboolean | UrlTree>
 | boolean | UrlTree {
        return true;
  }
}
    

在canActivate方法中,我们还可以使用跳转。如页面判断是否已经登录,如果没有登录,跳转到Login页面:

this.router.navigate(['/LOGin']);
    return false;
    

2. 控制路由是否可以激活

控制路由是否可以激活,需要定义在定义路由的地方,增加canActivate属性。如果需要,还可以增加data属性, 比如告诉我们的AuthGuard进入当前路由需要验证哪些权限。data属性是可选的。

const routes: Routes = [  {
    path: "page1",    component: Page1Component,    data: {
 PErmissions: ['YourPage1Permission'] }
,  // 传入参数给AuthGuard,可选    canActivate: [AuthGuard]  }
,  {
    path: "page2",    component: Page2omponent,    data: {
 permissions: ['YourPage2Permission'] }
,  // 传入参数给AuthGuard,可选    canActivate: [AuthGuard]  }
    ]

3. 控制路由是否退出(离开)

和控制路由是否可以激活类似,在路由定义出增加 canDeactivate,并制定相应的Guard守卫即可。这里不再举例

总结

  • 通过路由守卫(Route Guards)实现控制URL的进入和离开;

  • Angular CLI可以辅助我们创建guard文件;

更多编程相关知识,请访问:编程入门!!

以上就是Angular学习之路由守卫(Route Guards)浅析的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

Angular路由守卫

若转载请注明出处: Angular学习之路由守卫(Route Guards)浅析
本文地址: https://pptw.com/jishu/592746.html
asp保存二进制图片到access数据库 传播智客ASP.NET中级系列视频视频资料

游客 回复需填写必要信息