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 相关文章推荐
一个收集图片的bookmarlet(js 刷新页面中的图片)
May 27 Javascript
textarea 控制输入字符字节数(示例代码)
Dec 27 Javascript
JavaScript数据结构链表知识详解
Nov 21 Javascript
AngularJS中指令的四种基本形式实例分析
Nov 22 Javascript
js输入框使用正则表达式校验输入内容的实例
Feb 12 Javascript
微信小程序联网请求的轮播图
Jul 07 Javascript
Vue 自定义动态组件实例详解
Mar 28 Javascript
vue-cli项目中使用echarts图表实例
Oct 22 Javascript
详解vue 路由跳转四种方式 (带参数)
Apr 28 Javascript
简单了解微信小程序的目录结构
Jul 01 Javascript
vue实现数字滚动效果
Jun 29 Javascript
js实现简单的随机点名器
Sep 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
如何用PHP实现插入排序?
2013/04/10 PHP
深入PHP nl2br()格式化输出的详解
2013/06/05 PHP
一个漂亮的php验证码类(分享)
2013/08/06 PHP
基于linnux+phantomjs实现生成图片格式的网页快照
2015/04/15 PHP
thinkphp利用模型通用数据编辑添加和删除的实例代码
2016/11/20 PHP
php 截取中英文混合字符串的方法
2018/05/31 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
javascript 定义初始化数组函数
2009/09/07 Javascript
jQuery解决iframe高度自适应代码
2009/12/20 Javascript
json-lib出现There is a cycle in the hierarchy解决办法
2010/02/24 Javascript
jsTree 基于JQuery的排序节点 Bug
2011/07/26 Javascript
js变换显示图片的实例
2013/04/16 Javascript
页面按钮禁用与解除禁用的方法
2014/02/19 Javascript
JavaScript设计模式之单件模式介绍
2014/12/28 Javascript
jQuery获取file控件中图片的宽高与大小
2016/08/04 Javascript
浅谈js键盘事件全面控制
2016/12/01 Javascript
Angular6新特性之Angular Material
2018/12/28 Javascript
vue radio单选框,获取当前项(每一项)的value值操作
2020/09/10 Javascript
为什么JavaScript中0.1 + 0.2 != 0.3
2020/12/03 Javascript
Python 制作糗事百科爬虫实例
2016/09/22 Python
Python代码缩进和测试模块示例详解
2018/05/07 Python
PYQT5实现控制台显示功能的方法
2019/06/25 Python
Python aiohttp百万并发极限测试实例分析
2019/10/26 Python
使用Python画了一棵圣诞树的实例代码
2020/11/27 Python
为你的html5网页添加音效示例
2014/04/03 HTML / CSS
俄罗斯领先的移动和数字设备在线商店:Svyaznoy.ru
2020/12/21 全球购物
WEB控件可以激发服务端事件,请谈谈服务端事件是怎么发生并解释其原理?自动传回是什么?为什么要使用自动传回?
2012/02/21 面试题
服务之星获奖感言
2014/01/21 职场文书
软件专业毕业生个人自我鉴定
2014/04/17 职场文书
健康教育评估方案
2014/05/25 职场文书
推广活动策划方案
2014/08/23 职场文书
结婚当天新郎保证书
2015/05/08 职场文书
工伤认定行政答辩状
2015/05/22 职场文书
保护环境的宣传语
2015/07/13 职场文书
上级领导检查欢迎词
2015/09/30 职场文书
导游词之绍兴柯岩古镇
2020/01/09 职场文书