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

 更新时间:2018年05月10日 08:35:56   作者:寻找石头鱼  
这篇文章主要介绍了Angular4.x通过路由守卫进行路由重定向,实现根据条件跳转到相应的页面,这个功能在网上商城项目上经常会用到,下面小编给大家带来了解决方法一起看看吧

需求:

最近在做一个网上商城的项目,技术用的是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通过路由守卫进行路由重定向实现根据条件跳转到相应的页面,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • 详解Angular的8个主要构造块

    详解Angular的8个主要构造块

    Angular 主要分为八大构造块(也就是八个核心概念):模块、组件、模板、元数据、数据绑定、指令、服务、依赖注入。有兴趣的可以了解一下
    2017-06-06
  • Angular.JS中指令ng-if的注意事项小结

    Angular.JS中指令ng-if的注意事项小结

    这篇文章主要给大家分享了关于Angular.JS中指令ng-if的一点注意事项,分享出来供大家参考学习,文中介绍的还是相对来说比较详细,对大家具有一定的参考借鉴价值,需要的朋友们下面来一起看看吧。
    2017-06-06
  • 解决ng-repeat产生的ng-model中取不到值的问题

    解决ng-repeat产生的ng-model中取不到值的问题

    今天小编就为大家分享一篇解决ng-repeat产生的ng-model中取不到值的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • Ionic+AngularJS实现登录和注册带验证功能

    Ionic+AngularJS实现登录和注册带验证功能

    这篇文章主要介绍了Ionic+AngularJS实现登录和注册带验证功能,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-02-02
  • Angular2+如何去除url中的#号详解

    Angular2+如何去除url中的#号详解

    这篇文章主要给大家介绍了关于Angular 2+时如何去除url中#号的相关资料,文中先对#号去除的原因及方法进行详细的介绍和分析,然后通过示例代码给大家演示去除的方法,需要的朋友可以参考借鉴,下面随着小编来一起看看吧。
    2017-12-12
  • angular学习之从零搭建一个angular4.0项目

    angular学习之从零搭建一个angular4.0项目

    本篇文章主要介绍了从零搭建一个angular4.0项目,主要用到的工具angular4.0、angular-cli、npm(v3.10.8)、node(v6.2.0),有兴趣的可以了解一下
    2017-07-07
  • Angular实现的敏感文字自动过滤与提示功能示例

    Angular实现的敏感文字自动过滤与提示功能示例

    这篇文章主要介绍了Angular实现的敏感文字自动过滤与提示功能,结合实例形式分析了AngularJS针对字符串的输入判定及实时显示相关操作技巧,需要的朋友可以参考下
    2017-12-12
  • AngularJS中的路由使用及实现代码

    AngularJS中的路由使用及实现代码

    本篇文章主要介绍了AngularJS中的路由使用及实现代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • Angular 理解module和injector,即依赖注入

    Angular 理解module和injector,即依赖注入

    本文主要介绍Angular 理解module和injector的知识,这里整理了相关知识,并详细介绍了依赖注入的问题,有兴趣的小伙伴可以参考下
    2016-09-09
  • AngularJS点击添加样式、点击变色设置的实例代码

    AngularJS点击添加样式、点击变色设置的实例代码

    本篇文章主要介绍了AngularJS点击添加样式、点击变色设置的实例代码,具有一定的参考价值,有兴趣的可以了解一下
    2017-07-07

最新评论