angular4.0 路由守卫详解
在企业应用中权限、复杂页多路由数据处理、进入与离开路由数据处理这些是非常常见的需求。
当希望用户离开一个正常编辑页时,要中断并提醒用户是否真的要离开时,如果在Angular中应该怎么做呢?
其实Angular路由守卫属性可以帮我们做更多有意义的事,而且非常简单。
Angular 的 Route 路由参数中除了熟悉的 path、component 外,还包括四种是否允许路由激活与离开的属性。
- canActivate: 控制是否允许进入路由。
- canActivateChild: 等同 canActivate,只不过针对是所有子路由。
- canDeactivate: 控制是否允许离开路由。
- canLoad: 控制是否允许延迟加载整个模块。
这里我们只讲canActivate的用法
注册RouteguardService服务
代码如下,这个是完整的守卫逻辑;每一步都写好了注释,我就不细说了,看注释就明白了;
import { Injectable } from '@angular/core';
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { Router } from "@angular/router";
import userModel from '../model/user.model';
@Injectable()
export class RouteguardService implements CanActivate{
constructor(
private router: Router
) { }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean{
// 返回值 true: 跳转到当前路由 false: 不跳转到当前路由
// 当前路由名称
var path = route.routeConfig.path;
// nextRoute: 设置需要路由守卫的路由集合
const nextRoute = ['home', 'good-list', 'good-detail', 'cart', 'profile'];
let isLogin = userModel.isLogin; // 是否登录
// 当前路由是nextRoute指定页时
if (nextRoute.indexOf(path) >= ) {
if (!isLogin) {
// 未登录,跳转到login
this.router.navigate(['login']);
return false;
}else{
// 已登录,跳转到当前路由
return true;
}
}
// 当前路由是login时
if (path === 'login') {
if (!isLogin) {
// 未登录,跳转到当前路由
return true;
}else{
// 已登录,跳转到home
this.router.navigate(['home']);
return false;
}
}
}
}
上面的代码中,有这句代码:import userModel from '../model/user.model';
user.model用来记录用户的状态值以及其他属性,代码如下
let userModel = {
isLogin: false, // 判断是否登录
accout: '',
password: '',
};
export default userModel;
在app-routing.module.ts中配置路由守卫
首先注入RouteguardService服务,然后在需要守卫的路由配置中加入:canActivate: [RouteguardService]
这样在写有canActivate的路由中,都会调用RouteguardService服务,代码如下:
import {NgModule} from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import {HomeComponent} from "./page/home/home.component";
import {GoodDetailComponent} from "./page/good-detail/good-detail.component";
import {CartComponent} from "./page/cart/cart.component";
import {ProfileComponent} from "./page/profile/profile.component";
import {GoodListComponent} from "./page/good-list/good-list.component";
import { RouteguardService } from './service/routeguard.service';
import { LoginComponent } from './page/login/login.component';
const routes: Routes = [
{
path: '', // 初始路由重定向[写在第一个]
redirectTo: 'home',
pathMatch: 'full' // 必须要设置
},
{
path: 'login',
component: LoginComponent,
canActivate: [RouteguardService]
},
{
path: 'home',
component: HomeComponent,
canActivate: [RouteguardService]
},
{
path: 'good-detail',
component: GoodDetailComponent,
canActivate: [RouteguardService]
},
{
path: 'good-list',
component: GoodListComponent,
canActivate: [RouteguardService]
},
{
path: 'cart',
component: CartComponent,
canActivate: [RouteguardService]
},
{
path: 'profile',
component: ProfileComponent,
canActivate: [RouteguardService]
},
{
path: '**', // 错误路由重定向[写在最后一个]
redirectTo: 'home',
pathMatch: 'full' // 必须要设置
},
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
ok,工作量还挺大的,大家慢慢研究吧
angular4.0 路由守卫详解的更多相关文章
- vue2.0中router-link详解
vue2.0中router-link详解:https://blog.csdn.net/lhjuejiang/article/details/81082090 在vue2.0中,原来的v-link指令已 ...
- IIS7.0 Appcmd 命令详解和定时重启应用池及站点的设置
IIS7.0 Appcmd 命令详解 废话不说!虽然有配置界面管理器!但是做安装包的时候命令创建是必不可少的!最近使用NSIS制作安装包仔细研究了一下Appcmd的命令,可谓是功能齐全. 上网查了些资 ...
- loadrunner11.0 安装破解详解使用教程
loadrunner11.0 安装破解详解使用教程 来源:互联网 作者:佚名 时间:01-21 10:25:34 [大 中 小] 很多朋友下载了loadrunner11但不是很会使用,这里简单介绍下安 ...
- Apache2.2+Tomcat7.0整合配置详解
一.简单介绍 Apache.Tomcat Apache HTTP Server(简称 Apache),是 Apache 软件基金协会的一个开放源码的网页服务器,可以在 Windows.Unix.Lin ...
- IIS7.0 Appcmd 命令详解
原文 IIS7.0 Appcmd 命令详解 一:准备工作 APPcmd.exe 位于 C:\Windows\System32\inetsrv 目录 使用 Cd c:\Windows\System32\ ...
- Android EventBus 3.0 实例使用详解
EventBus的使用和原理在网上有很多的博客了,其中泓洋大哥和启舰写的非常非常棒,我也是跟着他们的博客学会的EventBus,因为是第一次接触并使用EventBus,所以我写的更多是如何使用,源码解 ...
- QuartusII13.0使用教程详解(一个完整的工程建立)
好久都没有发布自己的博客了,因为最近学校有比赛,从参加到现在都是一脸懵逼,幸亏有bingo大神的教程,让我慢慢走上了VIP之旅,bingo大神的无私奉献精神值得我们每一个业界人士学习,向bingo致敬 ...
- Admin注册和路由分发详解
Admin注册和路由分发详解 1.启动 #autodiscover_modules('admin', register_to=site) 2.注册 1.单例对象 admin.site = AdminS ...
- RxJava2.0的使用详解
RxJava2.0的使用详解 1,初识RxJava RxJava就是一种用Java语言实现的响应式编程,来创建基于事件的异步程序 RxJava是一个基于事件订阅的异步执行的一个类库,目前比较火的一些技 ...
随机推荐
- 洛谷 P3928 Sequence
题目描述 小强喜欢数列.有一天,他心血来潮,写下了三个长度均为n的数列. 阿米巴也很喜欢数列.但是他只喜欢其中一种,波动数列. 阿米巴把他的喜好告诉了小强.小强便打算找出这三个数列内的最长波动数列. ...
- labview生成可执行文件
labview生成可执行文件可以分为两种情况. 第一种,是电脑中有labview软件开发环境的情况 第二种,是电脑中没有安装labview软件开发环境 下面是一个简单的labview代码: 程序解释: ...
- 如何用shell脚本取出服务器图片
一 ,SHELL 是什么 (1)shell是一种命令行解释器. (2)是用户和Linux内核之间沟通的桥梁,属于中间件.见下图 (3)交互流程:shell接受用户输入的指令 =>将指令传达给Li ...
- BigInteger详解
在Java中有两个类BigInteger和BigDecimal分别表示大整数类和大浮点数类,理论上能够表示无线大的数,只要计算机内存足够大. 这两个类都在 java.math.* 包中,因此每次必须在 ...
- Spark Shuffle模块——Suffle Read过程分析
在阅读本文之前.请先阅读Spark Sort Based Shuffle内存分析 Spark Shuffle Read调用栈例如以下: 1. org.apache.spark.rdd.Shuffled ...
- svn 批量加入没有加入版本号控制的文件命令
svn st | awk '{if($1=="?"){print$2}}'|xargs svn add
- js原生的轮播,原理以及实践
轮播,无论是文字轮播还是图片轮播,他们的原理是一样的,都是通过定时器执行循环展示和影藏. 一.手动轮播 (1)原理 一系列的大小相等的图片平铺,利用CSS布局只显示一张图片,其余隐藏.通过计算偏移量利 ...
- web项目启动流程探索
在web项目的启动过程中,我们希望知道它的一般流程是什么,这样我们就可以在各个流程中加入相应的功能,或者对于我们排错也有帮助. 我们知道,当我们启动tomcat容器以后,容器首先初始化一些必要的组件, ...
- MPSOC之5——开发流程BOOT.BIN
需要把若干文件打成大包,烧写到flash或者sd卡中,才能启动运行. 1.petalinux打包 petalinux-packet打包时,需要petalinux的工程,限制太死了,不用. 2 wind ...
- cookies和re
参考:http://cuiqingcai.com/968.html http://cuiqingcai.com/977.html