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

相关文章

  • angular2 ng2-file-upload上传示例代码

    angular2 ng2-file-upload上传示例代码

    这篇文章主要介绍了angular2 ng2-file-upload上传示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • 详解Angular组件生命周期(一)

    详解Angular组件生命周期(一)

    每个Angular版本在其生命周期中都经历了各个阶段。组件在Angular中起着关键作用; 在这里,本文将讨论Angular中的组件生命周期以及它们如何影响框架所有版本的生命周期。
    2021-05-05
  • angular中ui calendar的一些使用心得(推荐)

    angular中ui calendar的一些使用心得(推荐)

    下面小编就为大家带来一篇angular中ui calendar的一些使用心得(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • AngularJS页面访问时出现页面闪烁问题的解决

    AngularJS页面访问时出现页面闪烁问题的解决

    这篇文章主要介绍了AngularJS框架使用中出现页面闪烁问题的解决方法,闪烁问题一般是初始化未加载完毕造成的,需要的朋友可以参考下
    2016-03-03
  • AngularJs 动态加载模块和依赖

    AngularJs 动态加载模块和依赖

    这篇文章主要介绍了AngularJs 动态加载模块和依赖方法的相关资料,需要的朋友可以参考下
    2016-09-09
  • angularjs请求数据的方法示例

    angularjs请求数据的方法示例

    这篇文章主要给大家介绍了关于angularjs请求数据的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用angularjs具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • Angular应用程序的Hydration基本概念详解

    Angular应用程序的Hydration基本概念详解

    这篇文章主要为大家介绍了Angular应用程序的Hydration基本概念详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • Angularjs中使用Filters详解

    Angularjs中使用Filters详解

    本文给大家总结了下在Angularjs的模板、控制器、或者服务中使用Filters的方法,有需要的小伙伴可以参考下
    2016-03-03
  • 详解AngularJS的通信机制

    详解AngularJS的通信机制

    这篇文章主要介绍了AngularJS的通信机制,AngularJS是非常具有人气的JavaScript库,需要的朋友可以参考下
    2015-06-06
  • 基于Angular 8和Bootstrap 4实现动态主题切换的示例代码

    基于Angular 8和Bootstrap 4实现动态主题切换的示例代码

    这篇文章主要介绍了基于Angular 8和Bootstrap 4实现动态主题切换的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02

最新评论