1. 路由

Angular路由: 可以控制页面跳转;可以在多视图间切换;

2. 路由守卫

Angular路由守卫: 在进入或离开某路由时,用于判断是否可以离开、进入某路由;;; return true 代表可以进入当前路由;return false 代表不可以进入当前路由,但可以进入自定义的路由;

3. 路由守卫与路由的关系

路由守卫只只能应用于路由项上;路由守卫可以应用于多个路由项;每个路由项也可以有多个路由守卫;

路由守卫通过实现如下接口来操作:

  • canActivate: 控制是否允许进入路由。(通过return true/false决定)
  • canActivateChild: 等同 canActivate,只不过针对是所有子路由。
  • canDeactivate: 控制是否允许离开路由。
  • canLoad: 控制是否允许延迟加载整个模块。

4. 什么情况下,路由项上需要配置路由守卫属性

当需要某些条件/某个身份才能进入的路由,这时需要在路由项上加入路由守卫属性

5. 路由守卫的使用 (本例主要实现根据不同身份进入不同路由)

第一步: guard.service.ts - 定义路由守卫文件
  • 第一种写法: 返回Promise对象

@Injectable()
export class GuardService implements CanActivate {
constructor(private router: Router, private _http: HttpClient) {
}
getIsAdmin() {
return new Promise((resolve) => {
this._http.get('/user/isAdmin').subscribe((resp: boolean) => {
resolve(resp);
});
});
}
// 进入路由守卫
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
return this.getIsAdmin().then((isAdmin) => {
if (isAdmin) { // 如果是管理员, 可以进入当前路由;
return true;
} else { // 如果不是管理员,不能进入当前路由,进入手动导航的ordinary路由;
this.router.navigateByUrl('/ordinary');
return false;
}
});
}
}
  • 第二种写法: 返回Observable对象

@Injectable()
export class GuardService implements CanActivate {
constructor(private router: Router, private _http: HttpClient) {
} // 进入路由守卫
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
return this._http.get('/user/isAdmin').map((isAdmin) => {
if (isAdmin) { // 如果是管理员, 可以进入当前路由;
return true;
} else { // 如果不是管理员,不能进入当前路由,进入手动导航的ordinary路由;
this.router.navigateByUrl('/ordinary');
return false;
}
});
}
}
第二步: app.module.ts - 注册路由文件

@NgModule({
declarations: [AppComponent],
providers: [
GuardService
],
bootstrap: [AppComponent]
})
第三步: app.routing.ts - 给对应的路由项配置路由守卫

// 当导航到front时,需要进入路由守卫的canActivate类进行判断是否可以进入此路由 // 什么时候需要在路由项上加路由守卫??当需要某些条件/某个身份才能进入的路由,这时需要在路由项上加入路由守卫属性 export const routes: Routes = [
{
path: '',
component: AppComponent,
children: [
{path: '', redirectTo: 'front', pathMatch: 'full'},
{path: 'front', component: FrontendComponent, canActivate: [GuardService]},
{path: 'ordinary', component: OrdinaryComponent}
]
},
];
@NgModule({
imports: [RouterModule.forRoot(routes, {useHash: true})],
exports: [RouterModule]
})
export class RoutingModule {
}

Angular 路由守卫的更多相关文章

  1. Angular路由守卫 canActivate

    作用 canActivate 控制是否允许进入路由. canActivateChild 等同 canActivate,只不过针对是所有子路由. 关键代码 创建路由守卫 import { Injecta ...

  2. Angular路由守卫 canDeactivate

    目的 离开页面时,做出逻辑判断 以ng-alain的项目为基础做演示 效果如图: 关键代码 定义一个CanDeactivateGuardService export class CanDeactiva ...

  3. angular路由守卫

     路由守卫是指当用户满足了某些要求之后才可以离开或者进入某个页面或者场景的时候使用.比如说只有当用户填写了用户名和密码之后才可以进入首页,比如说用户离开某个页面时明月保存信息提示用户是否保存信息后再离 ...

  4. angular4.0 路由守卫详解

    在企业应用中权限.复杂页多路由数据处理.进入与离开路由数据处理这些是非常常见的需求. 当希望用户离开一个正常编辑页时,要中断并提醒用户是否真的要离开时,如果在Angular中应该怎么做呢? 其实Ang ...

  5. angular路由详解六(路由守卫)

    路由守卫 CanActivate: 处理导航到某个路由的情况. CanDeactivate:处理从当前路由离开的情况. Resole:在路由激活之前获取路由数据. 1.CanActivate: 处理导 ...

  6. Angular路由——路由守卫

    一.路由守卫 当用户满足一定条件才被允许进入或者离开一个路由. 路由守卫场景: 只有当用户登录并拥有某些权限的时候才能进入某些路由. 一个由多个表单组成的向导,例如注册流程,用户只有在当前路由的组件中 ...

  7. Angular 从入坑到挖坑 - 路由守卫连连看

    一.Overview Angular 入坑记录的笔记第六篇,介绍 Angular 路由模块中关于路由守卫的相关知识点,了解常用到的路由守卫接口,知道如何通过实现路由守卫接口来实现特定的功能需求,以及实 ...

  8. Angular入门到精通系列教程(13)- 路由守卫(Route Guards)

    1. 摘要 2. 路由守卫(Route Guards) 2.1. 创建路由守卫 2.2. 控制路由是否可以激活 2.3. 控制路由是否退出(离开) 3. 总结 环境: Angular CLI: 11. ...

  9. Angular 4 路由守卫

    路由守卫 只有当用户已经登录并拥有某些权限时才能进入某些路由 一个有多个表单组成的向导,如注册流程,用户只有在当前组件的组件中填写了满足要求的信息才可以导航到下一个路由 当用户未执行保存操作而试图离开 ...

随机推荐

  1. 边缘缓存模式(Cache-Aside Pattern)

    边缘缓存模式(Cache-Aside Pattern),即按需将数据从数据存储加载到缓存中.此模式最大的作用就是提高性能减少不必要的查询. 1 模式 先从缓存查询数据 如果没有命中缓存则从数据存储查询 ...

  2. Java Builder 模式,你搞明白了么?

    Builder 模式定义 Builder 模式中文叫作建造者模式,又叫生成器模式,它属于对象创建型模式,是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.建造者模式是一步一步 ...

  3. UVA-10004-Bicoloring二分图染色

    题意:给一张图,判断是不是二分图: 自己一开始不知道是二分图染色,理解的是任意三点不能互相连接 可能以后遇到这样的模型,可以往二分图想: 首先怎么判定一个图是否为二分图 从其中一个定点开始,将跟它邻接 ...

  4. hihocoder #1609 : 数组分拆II(思维)

    题目链接:http://hihocoder.com/problemset/problem/1609 题解:就先拿一个数组最多分成两部分来说吧 8 1 2 3 4 5 1 2 3 显然 输出时2 3 可 ...

  5. Codeforces 369 C Valera and Elections

    Valera and Elections 题意:现在有n个候选人, 有n-1条路, 如果选择了这个候选人, 这个候选人就会将从自己这个城市到1号城市上所有坏的路都修复一下,现在求最小的候选人数目, 如 ...

  6. bzoj 1146 网络管理Network (CDQ 整体二分 + 树刨)

    题目传送门 题意:求树上路径可修改的第k大值是多少. 题解:CDQ整体二分+树刨. 每一个位置上的数都会有一段持续区间 根据CDQ拆的思维,可以将这个数拆成出现的时间点和消失的时间点. 然后通过整体二 ...

  7. Codeforces Round #480 (Div. 2) B. Marlin

    题目地址:http://codeforces.com/contest/980/problem/B 官方题解: 题意: 有一个城市有4行n列,n是奇数,有一个村庄在(1,1),村民在(4,n)钓鱼:还有 ...

  8. HDU2276 Kiki & Little Kiki 2 矩阵快速幂

    Kiki & Little Kiki 2 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java ...

  9. codeforces 572 D. Minimization(dp+ 思维)

    题目链接:http://codeforces.com/contest/572/problem/D 题意:给出一个序列,可以任意调整序列的顺序,使得给出的式子的值最小 题解:显然要先排一下序,然后取相邻 ...

  10. @PathVariable性能损耗分析

    前端时间参与了一次业务线排障,是接口服务并发性能比较差,性能损耗大的问题,我经过几次研究分析和压测,确定了故障源是@PathVariable耗时过长引起的. @PathVariable使用形式: @R ...