本篇文章带大家了解一下angular中的路由守卫(route guards),介绍一下创建路由守卫、控制路由是否可以激活、控制路由是否退出的方法,希望对大家有所帮助!
环境:Angular CLI: 11.0.6Angular: 11.0.7Node: 12.18.3npm : 6.14.6IDE: 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 to select, to toggle all, to invert selection)>(*) CanActivate ( ) CanActivateChild ( ) CanDeactivate ( ) CanLoad
登录后复制
说明:
CanActivate: 控制路由是否可以激活
CanActivateChild: 控制子路由是否可以激活
CanDeactivate: 控制路由是否可以退出
CanLoad: 控制模块(module)是否可以被加载
比较经常使用的是1、3,分别控制进入和退出。 按照上面配置,AngularCLI自动生成如下代码,return true; 替换为我们实际的代码即可。return false; 表示不允许跳转,或者取消离开当前页面。
// auth.guard.tsimport { Injectable } from '@angular/core';import { CanActivate, CanDeactivate, ActivatedRouteSnapshot, RouterStateSnapshot, UrlTree } from '@angular/router';import { Observable } from 'rxjs';@Injectable({ providedIn: 'root'})export class AuthGuard implements CanActivate, CanDeactivate { canActivate( route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable | Promise | 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)浅析的详细内容,更多请关注【创想鸟】其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2706342.html