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 相关文章推荐
博客侧边栏模块跟随滚动条滑动固定效果的实现方法(js+jquery等)
Mar 24 Javascript
js拼接html注意问题示例探讨
Jul 14 Javascript
JavaScript使用slice函数获取数组部分元素的方法
Apr 06 Javascript
分享JavaScript监听全部Ajax请求事件的方法
Aug 28 Javascript
js HTML5多媒体影音播放
Oct 17 Javascript
在JSP中如何实现MD5加密的方法
Nov 02 Javascript
BootStrap便签页的简单应用
Jan 06 Javascript
BootStrap fileinput.js文件上传组件实例代码
Feb 20 Javascript
Webpack中css-loader和less-loader的使用教程
Apr 27 Javascript
bootstrap中的导航条实例代码详解
May 20 Javascript
vue计算属性无法监听到数组内部变化的解决方案
Nov 06 Javascript
js动态添加带圆圈序号列表的实例代码
Feb 18 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往windows中添加用户
2006/12/06 PHP
php读取torrent种子文件内容的方法(测试可用)
2016/05/03 PHP
PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析
2017/01/12 PHP
PHP多线程模拟实现秒杀抢单
2018/02/07 PHP
php+lottery.js实现九宫格抽奖功能
2019/07/21 PHP
PHP实现cookie跨域session共享的方法分析
2019/08/23 PHP
SWFObject Flash js调用类
2008/07/08 Javascript
两个比较有用的Javascript工具函数代码
2010/02/17 Javascript
IE9+已经不对document.createElement向下兼容的解决方法
2015/09/14 Javascript
使用JS实现图片展示瀑布流效果的实例代码
2016/09/12 Javascript
微信小程序 标签传入数据
2017/05/08 Javascript
Vue.js实现一个todo-list的上移下移删除功能
2017/06/26 Javascript
ES6 迭代器(Iterator)和 for.of循环使用方法学习(总结)
2018/02/08 Javascript
vue init webpack 建vue项目报错的解决方法
2018/09/29 Javascript
jQuery实现为table表格动态添加或删除tr功能示例
2019/02/19 jQuery
如何使用pm2快速将项目部署到远程服务器
2019/03/12 Javascript
jQuery位置选择器用法实例分析
2019/06/28 jQuery
layui 富文本赋值,取值,取纯文本值的实例
2019/09/18 Javascript
javascript将扁平的数据转为树形结构的高效率算法
2020/02/27 Javascript
Vue js with语句原理及用法解析
2020/09/03 Javascript
vscode中的vue项目报错Property ‘xxx‘ does not exist on type ‘CombinedVueInstance<{ readyOnly...Vetur(2339)
2020/09/11 Javascript
[59:30]VG vs LGD 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.22
2019/09/05 DOTA
浅谈numpy数组的几种排序方式
2017/12/15 Python
python面试题小结附答案实例代码
2019/04/11 Python
django框架模板语言使用方法详解
2019/07/18 Python
利用python实现短信和电话提醒功能的例子
2019/08/08 Python
python抓取多种类型的页面方法实例
2019/11/20 Python
tensorflow 分类损失函数使用小记
2020/02/18 Python
详解tf.device()指定tensorflow运行的GPU或CPU设备实现
2021/02/20 Python
科沃斯机器人官网商城:Ecovacs
2016/08/29 全球购物
网游商务专员求职信
2013/10/15 职场文书
职工运动会邀请函
2014/01/19 职场文书
给物业的表扬信
2014/01/21 职场文书
农业局学习党的群众路线教育实践活动心得体会
2014/03/07 职场文书
干部考核工作总结
2015/08/12 职场文书
导游词之金鞭溪风景区
2019/09/12 职场文书