vue-router全局路由守卫的使用

全局路由守卫使用场景:控制页面登录,权限控制。

  • 当用户未登录的情况下,都是跳转登录页面;
  • 当用户没有权限时,进入无权限页面;

vue-router v4.版本

详细查看官网:https://router.vuejs.org/zh/guide/advanced/navigation-guards.html

import { createRouter, createWebHashHistory, RouteRecordRaw } from "vue-router";
import HomeView from "../views/HomeView.vue";

const routes: Array<RouteRecordRaw> = [
  {
    path: "/home",
    name: "home",
    component: HomeView,
  },
  {
    path: "/about",
    name: "about",
    // route level code-splitting
    // this generates a separate chunk (about.[hash].js) for this route
    // which is lazy-loaded when the route is visited.
    component: () =>
      import(/* webpackChunkName: "about" */ "../views/AboutView.vue"),
  },
  {
    path: "/login",
    name: "login",
    component: () => import("../views/LoginPage.vue"),
  },
];

const router = createRouter({
  history: createWebHashHistory(),
  routes,
});

router.beforeEach((to, form, next) => {
  console.log("beforeEach", to, form);
  const obj = sessionStorage.getItem("userInfo") || "{ }";
  const userInfo = JSON.parse(obj);

  // 判断是否登录
  if (Object.keys(userInfo).length) {
    console.log("go");
    next();
  } else {
    if (to.fullPath === "/login") {
      next();
    } else {
      next("/login");
    }
  }
});

export default router;


vue-router v3.版本

详细查询官网:https://v3.router.vuejs.org/zh/guide/advanced/navigation-guards.html#%E5%85%A8%E5%B1%80%E5%89%8D%E7%BD%AE%E5%AE%88%E5%8D%AB

import Vue from "vue";
import Router from "vue-router";
import Home from "./views/Home.vue";

import { Role_List } from "./common/constant";
Vue.use(Router);

const router = new Router({
  routes: [
    {
      path: "/",
      name: "home",
      component: Home,
      meta: {
        role: []
      }
    }
  ]
});

router.beforeEach((to, form, next) => {
  const userInfo = localStorage.getItem("userInfo") || {};
  const routerRoleList = to.meta.role || []; //当前路由具有权限角色list
  if (typeof userInfo.roleId === "number") {
    //当前角色信息
    const currentRoleObj = Role_List.filter(v => v.value === userInfo.roleId)[0];

    if (routerRoleList.includes(userInfo.roleId)) {
      next();
    } else {
      const defaultPath = currentRoleObj.defaultPath;
      next(defaultPath);
    }
  } else {
    //用户接口获取失败时重定向home页
    if (["/"].includes(to.fullPath)) {
      next();
    } else {
      next("/");
    }
  }

  
});
export default router;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue-router提供了导航守卫来保护由的导航。导航守卫可以在跳转或取消导航的过程中进行拦截。导航守卫可以分为全局守卫由独享守卫和组件级守卫全局守卫是注册在router实例上的,可以使用router.beforeEach方法注册一个全局前置守卫。在每次由切换之前,全局前置守卫会被触发并接收to、from和next三个参数。可以在全局前置守卫中进行一些权限验证或者其他操作,然后通过调用next方法来进行导航。 由独享守卫是在定义由的时候通过beforeEnter属性来注册。由独享守卫只会对特定的由生效,可以在由配置中定义一个beforeEnter函数来进行拦截操作。 组件级守卫使用vue-router提供的beforeRouteEnter、beforeRouteUpdate和beforeRouteLeave方法来注册。beforeRouteEnter在进入由前被调用,而beforeRouteUpdate在当前由复用时被调用,beforeRouteLeave在离开当前由时被调用。这些守卫可以在组件内部进行定义,并可以在组件内部进行一些操作,比如获取数据或者进行一些清理工作。 总结起来,vue-router守卫提供了全局守卫由独享守卫和组件级守卫来保护由的导航,可以在不同的阶段进行各种操作,确保由的安全和灵活性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Vue守卫(导航守卫)](https://blog.csdn.net/m0_48949881/article/details/122436528)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值