angular 2+ 路由守卫
1. 定义接口名称 /domain/login-guard.ts
export interface LoginGuard {
data: any;
msg: string;
status: boolean;
}
2. 定义actions /ngrx/actions/login-guard.action.ts
import { Action } from '@ngrx/store';
import {LoginGuard} from '../../domain/login-guard';
/**
* For each action type in an action group, make a simple
* enum object for all of this group's action types.
*/
export enum ActionTypes {
GUARD = '[GUARD]'
};
/**
* Every action is comprised of at least a type and an optional
* payload. Expressing actions as classes enables powerful
* type checking in reducer functions.
*/
export class GuardSuccess implements Action {
readonly type = ActionTypes.GUARD;
constructor(public payload: LoginGuard) { }
}
/**
* Export a type alias of all actions in this action group
* so that reducers can easily compose action types
*/
export type Actions
= GuardSuccess;
3. 定义reducers /ngrx/actions/login-guard.reducer.ts
import * as fromLogin from '../actions/login-guard.action';
import {LoginGuard} from '../../domain/login-guard'; export interface State {
guard: LoginGuard;
} export const initialState: State = {
guard: {
data: '',
msg: '',
status: true
}
}; export function reducer(state = initialState, action: fromLogin.Actions): State {
switch (action.type) {
case fromLogin.ActionTypes.GUARD: {
return {...state, guard: action.payload};
}
default: {
return state;
}
}
}
4. login.service.ts
import {Injectable} from '@angular/core';
import {ActivatedRouteSnapshot, NavigationEnd, Router, RouterStateSnapshot} from '@angular/router';
import {Observable} from 'rxjs/Observable';
import 'rxjs';
import {HttpClient} from '@angular/common/http';
import * as fromReducer from '../ngrx/reducers/index';
import {Store} from "@ngrx/store";
import {GuardSuccess} from '../ngrx/actions/login-guard.action';
export class LoginService {
constructor(private router: Router, private http: HttpClient, private store$: Store<fromReducer.State>) {
}
// canActivate: 控制是否允许进入路由。
canActivate(route: ActivatedRouteSnapshot,
state: RouterStateSnapshot): boolean | Observable<boolean> | Promise<boolean> {
return this.activate();
}
// 在登陆的时候会把登陆信息存到浏览器localStorage,退出登陆时remove掉,如果是直接打开地址而没有登陆的话,会跳到登陆界面,judgeuser是请求用户信息接口,setUserInfo()把请求到的信息存到浏览器
activate(): Observable<boolean> {
const url = `${environment.path}/judgeUser`;
const params = JSON.parse(localStorage.getItem('LOGININFO'));
const param = {
emNumber:params.emNumber,
emPhone:params.emPhone
}
return this.http.post(url, param).map((guard: LoginGuard) => {
const guard$ = guard;
if (!guard$.status) {
this.router.navigate(['/']);
}
setUserInfo(guard$);
this.store$.dispatch(new GuardSuccess(guard$));
return guard$.status;
});
}
}
5. service注入
import {LoginService} from './service/login.service';
@NgModule({
declarations: [
AppComponent,
DemoComponent,
// HtmlPipe
],
imports: [
BrowserAnimationsModule,
AppRoutingModule,
ViewModule,
ShareModule,
AppStoreModule,
HttpClientModule,
DirectivesModule,
],
providers: [LayerService, InterfaceService, LoginService, {
provide: LocationStrategy,
useClass: HashLocationStrategy
}],
bootstrap: [AppComponent]
})
export class AppModule { }
angular 2+ 路由守卫的更多相关文章
- Angular 4 路由守卫
路由守卫 只有当用户已经登录并拥有某些权限时才能进入某些路由 一个有多个表单组成的向导,如注册流程,用户只有在当前组件的组件中填写了满足要求的信息才可以导航到下一个路由 当用户未执行保存操作而试图离开 ...
- Angular4.x通过路由守卫进行路由重定向,实现根据条件跳转到相应的页面
需求: 最近在做一个网上商城的项目,技术用的是Angular4.x.有一个很常见的需求是:用户在点击"我的"按钮时读取cookie,如果有数据,则跳转到个人信息页面,否则跳转到注册 ...
- angular路由详解六(路由守卫)
路由守卫 CanActivate: 处理导航到某个路由的情况. CanDeactivate:处理从当前路由离开的情况. Resole:在路由激活之前获取路由数据. 1.CanActivate: 处理导 ...
- angular路由守卫
路由守卫是指当用户满足了某些要求之后才可以离开或者进入某个页面或者场景的时候使用.比如说只有当用户填写了用户名和密码之后才可以进入首页,比如说用户离开某个页面时明月保存信息提示用户是否保存信息后再离 ...
- Angular路由——路由守卫
一.路由守卫 当用户满足一定条件才被允许进入或者离开一个路由. 路由守卫场景: 只有当用户登录并拥有某些权限的时候才能进入某些路由. 一个由多个表单组成的向导,例如注册流程,用户只有在当前路由的组件中 ...
- Angular路由守卫 canActivate
作用 canActivate 控制是否允许进入路由. canActivateChild 等同 canActivate,只不过针对是所有子路由. 关键代码 创建路由守卫 import { Injecta ...
- Angular路由守卫 canDeactivate
目的 离开页面时,做出逻辑判断 以ng-alain的项目为基础做演示 效果如图: 关键代码 定义一个CanDeactivateGuardService export class CanDeactiva ...
- Angular 路由守卫
1. 路由 Angular路由: 可以控制页面跳转:可以在多视图间切换: 2. 路由守卫 Angular路由守卫: 在进入或离开某路由时,用于判断是否可以离开.进入某路由::: return true ...
- Angular 从入坑到挖坑 - 路由守卫连连看
一.Overview Angular 入坑记录的笔记第六篇,介绍 Angular 路由模块中关于路由守卫的相关知识点,了解常用到的路由守卫接口,知道如何通过实现路由守卫接口来实现特定的功能需求,以及实 ...
随机推荐
- struts2 的国际化
一.使用步骤 1)写资源文件,资源文件名命名规范和之前的讲的一致,有疑问请参考java开发中国际化 2)配置,在 struts.xml 中使用常量进行加载 struts.custom.i18n.res ...
- struts2实现简单文件上传
struts2 在内部已经帮我们做了很多封装的工作,我们只需要简单的写一些配置即可. 1 表单页面 <form action="${pageContext.request.contex ...
- 管道相关函数(1)-pipe
定义: int pipe(int filedes[2]); 表头文件: #include<unistd.h> 说明: pipe()会建立管道, 并将文件描述词由参数filedes数组返回. ...
- Centos Java 从1.7升级为1.8
查看安装的sdk版本 yum list installed |grep java 卸载JDK相关文件输入和tzdata-java输入 yum -y remove java-1.7.0-openjdk* ...
- php chr() ord()中文截取乱码问题解决方法
今天看到chr() ord()中文截取乱码问题这个例子,觉得相当的不错,拿出来和大家分享下,有兴趣的朋友可以去试下,看看怎么样. 代码如下: <?php $lenth = ; $str = &q ...
- SAP ECC6安装系列四:安装过程详解
原作者博客 http://www.cnblogs.com/Michael_z/ ======================================== 续接上篇,我们终于按下了 “Next” ...
- 关于Safe DOG的文件上传bypass
Author:倾旋payloads@aliyun.com本文由科拉实验室成员倾旋原创文章 Part 1 分析 此文主要研究安全狗的数据包分析功能,由于很多人都认为安全狗是通过正则去匹配的,那么暂且那么 ...
- Linux crontab 实现每秒执行
Linux crontab 实现每秒执行 linux crontab 命令,最小的执行时间是一分钟.如需要在小于一分钟内重复执行,可以有两个方法实现. 1.使用延时来实现每N秒执行 创建一个php做执 ...
- hdu6134 Battlestation Operational 莫比乌斯第一种形式
/** 题目:hdu6134 Battlestation Operational 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6134 题意:f(n) = ...
- 使用Javascript实现随机字符串
方法一(其实是毫秒时间数字字符串): function randomString() { return '' + new Date().getTime(); } 方法二(随机字母数字字符串): var ...