Angular4.x通过路由守卫进行路由重定向实现根据条件跳转到相应的页面(推荐)


Posted in Javascript onMay 10, 2018

需求:

最近在做一个网上商城的项目,技术用的是Angular4.x。有一个很常见的需求是:用户在点击“我的”按钮时读取cookie,如果有数据,则跳转到个人信息页面,否则跳转到注册或登录页面

解决

在这里通过Angular的路由守卫来实现该功能。

1. 配置路由信息

const routes = [
 { path: 'home', component: HomeComponent },
 { path: 'product', component: ProductComponent },
 { path: 'register', component: RegisterComponent },
 { path: 'my', component: MyComponent },
 { path: 'login', component: LoginComponent, canActivate: [RouteguardService] },//canActivate就是路由守卫
 { path: '', redirectTo: '/home', pathMatch: 'full' }
]

2. 路由守卫条件(RouteguardService.ts)

import { Injectable, Inject } from "@angular/core";
import { DOCUMENT } from "@angular/common";
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router, NavigationStart } from "@angular/router";
import userModel from "./user.model";

@Injectable()
export class RouteguardService implements CanActivate {
  constructor(private router: Router, @Inject(DOCUMENT) private document: any) {
  }

  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {

    // this.setCookie("userId", "18734132326", 10);
    //读取cookie
    var cookies = this.document.cookie.split(";");
    var userInfo = { userId: "", pw: "" };
    if (cookies.length > 0) {
      for (var cookie of cookies) {
        if (cookie.indexOf("userId=") > -1) {
          userModel.accout = cookie.split("=")[0];
          userModel.password = cookie.split("=")[1];
          userModel.isLogin = false;
        }
      }
    }

    //获取当前路由配置信息
    var path = route.routeConfig.path;
    if (path == "login") {
      if (!userModel.isLogin) {
        //读取cookie如果没有用户信息,则跳转到当前登录页
        return true;
      } else {
        //如果已经登录了则跳转到个人信息页面,下面语句是通过ts进行路由导航的
        this.router.navigate(['product'])
      }
    }

  }

  setCookie(cname, cvalue, exdays) {
    var d = new Date();
    d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
    var expires = "expires=" + d.toUTCString();
    document.cookie = cname + "=" + cvalue + "; " + expires;
  }
}

总结

以上所述是小编给大家介绍的Angular4.x通过路由守卫进行路由重定向实现根据条件跳转到相应的页面,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JQuery拖拽元素改变大小尺寸实现代码
Dec 10 Javascript
jQuery选择器源码解读(二):select方法
Mar 31 Javascript
JavaScript实现添加及删除事件的方法小结
Aug 04 Javascript
Javascript中Date类型和Math类型详解
Feb 27 Javascript
jquery使用on绑定a标签无效 只能用live解决
Jun 02 Javascript
Bootstrap 轮播(Carousel)插件
Dec 26 Javascript
canvas实现简易的圆环进度条效果
Feb 28 Javascript
vue 中自定义指令改变data中的值
Jun 02 Javascript
基于VUE.JS的移动端框架Mint UI的使用
Oct 11 Javascript
Vue中使用sass实现换肤功能
Sep 07 Javascript
Layui数据表格判断编辑输入的值,是否为我需要的类型详解
Oct 26 Javascript
原生js实现移动小球(碰撞检测)
Dec 17 Javascript
JS中的JSON对象的定义和取值实现代码
May 09 #Javascript
js循环map 获取所有的key和value的实现代码(json)
May 09 #Javascript
js合并两个数组生成合并后的key:value数组
May 09 #Javascript
详解Puppeteer 入门教程
May 09 #Javascript
node基于puppeteer模拟登录抓取页面的实现
May 09 #Javascript
nuxt框架中路由鉴权之Koa和Session的用法
May 09 #Javascript
jQuery简单实现的HTML页面文本框模糊匹配查询功能完整示例
May 09 #jQuery
You might like
在WIN98下以apache模块方式安装php
2006/10/09 PHP
写php分页时出现的Fatal error的解决方法
2011/04/18 PHP
yii框架配置默认controller和action示例
2014/04/30 PHP
smarty半小时快速上手入门教程
2014/10/27 PHP
php jsonp单引号转义
2014/11/23 PHP
启用Csrf后POST数据时出现的400错误
2015/07/05 PHP
javascript 打印页面代码
2009/03/24 Javascript
ie 调试javascript的工具
2009/04/29 Javascript
6款新颖的jQuery和CSS3进度条插件推荐
2013/03/05 Javascript
js为空或不是对象问题的快速解决方法
2013/12/11 Javascript
JavaScript匿名函数与委托使用示例
2014/07/22 Javascript
基于jquery实现三级下拉菜单
2016/05/10 Javascript
NodeJs下的测试框架Mocha的简单介绍
2017/02/22 NodeJs
Vue完整项目构建(进阶篇)
2018/02/10 Javascript
JS实现的文件拖拽上传功能示例
2018/05/21 Javascript
Vue组件中的data必须是一个function的原因浅析
2018/09/03 Javascript
vue单页缓存方案分析及实现
2018/09/25 Javascript
vue封装一个简单的div框选时间的组件的方法
2019/01/06 Javascript
使用Node.js实现一个多人游戏服务器引擎
2019/03/13 Javascript
vue+axios 拦截器实现统一token的案例
2020/09/11 Javascript
JavaScript中clientWidth,offsetWidth,scrollWidth的区别
2021/01/25 Javascript
[06:21]2014DOTA2国际邀请赛 庆祝VG首阶段领跑;B叔为挣牛排半夜整理情报
2014/07/13 DOTA
[44:15]国士无双DOTA2 6.82版本详解(上)
2014/09/28 DOTA
python类型强制转换long to int的代码
2013/02/10 Python
简单介绍Python中的RSS处理
2015/04/13 Python
python实现判断一个字符串是否是合法IP地址的示例
2018/06/04 Python
在Python中给Nan值更改为0的方法
2018/10/30 Python
详解Python 爬取13个旅游城市,告诉你五一大家最爱去哪玩?
2019/05/07 Python
python如何解析配置文件并应用到项目中
2019/06/27 Python
Python正则表达式匹配数字和小数的方法
2019/07/03 Python
Python中pymysql 模块的使用详解
2019/08/12 Python
Python下利用BeautifulSoup解析HTML的实现
2020/01/17 Python
详解Python3中的 input() 函数
2020/03/18 Python
企业法人代表授权委托书
2014/10/02 职场文书
opencv检测动态物体的实现
2021/07/21 Python
基于Go语言构建RESTful API服务
2021/07/25 Golang