当前位置:首页 » 《资源分享》 » 正文

Vite + Vue3 + TS项目配置前置路由守卫

16 人参与  2024年09月30日 13:20  分类 : 《资源分享》  评论

点击全文阅读


        在现代前端开发中,使用 Vue 3 TypeScript 的组合是一种流行且高效的开发方式。Vite 是一个极速的构建工具,可以显著提升开发体验。本文博主将指导你如何在 Vite + Vue 3 + TypeScript 项目中配置前置路由守卫(Navigation Guards)。

前置条件

在开始配置项目前置路由守卫前,博主希望你能够先达成以下前置条件:

1.完成Vue3前端项目搭建: Vite 创建 Vue3 + TS 项目

2.引入Vue-Router模块:Vue3项目配置Vue-Router

3.完成Pinia配置:Vue项目安装Pinia

1.创建前置守卫

        在之前的章节中,我们已经完成了路由视图和路由重定向的配置,现在我们只需要为我们的路由器实例对象添加一个导航守卫就可以控制是否放行路由跳转啦。

        我们可以通过 router.beforeEach 注册一个全局前置守卫,当一个导航触发时,全局前置守卫按照创建顺序调用。

        守卫是异步解析执行的,导航在所有守卫 resolve 完之前一直处于等待中

// 路由配置文件 index.tsimport { createWebHistory, createRouter } from 'vue-router'// 定义路由配置const routes: Array<any> = [    {        path: '/',        redirect: '/home'    },    {        path: '/login',        name: 'Login',        component: () => import('/@/views/login/index.vue')    },    {        path: '/home',        name: 'Home',        component: () => import('/@/views/home/index.vue'),    }]// 创建路由实例const router = createRouter({    history: createWebHistory(),    // 导航历史记录模式    routes})// 导航守卫router.beforeEach((to, from) => {    // 返回 false 以取消导航    return false})// 导出实例export default router

每个路由守卫都可以有以下三个参数:

to:即将要进入的目标;from:当前导航正要离开的路由;next:当你在使用next时,确保 next 在任何给定的导航守卫中都被严格调用一次。它可以出现多于一次,但是只能在所有的逻辑路径都不重叠的情况下,否则钩子永远都不会被解析或报错。

 2.配置无token跳转登录页

        既然知道了 Vue-Router 导航守卫的工作机制,那么我们现在可以尝试一下结合 Pinia 进行路由控制了:

        2.1.配置User状态

        在 src/store/ 目录下,新建 userInfo.ts 文件,用于存储 User/token 等状态:

// userInfo.tsimport { defineStore } from 'pinia'import { reactive } from 'vue'interface UserInfo {    token: string,    userId: string,    userName: string,    roles: Array<string>}export const useUserInfoStore = defineStore('userInfo', () => {    const state = reactive({        userInfo: {} as UserInfo    })    const setUserInfo = (userInfo: UserInfo) => {        state.userInfo = userInfo    }    const getUserInfo = () => {        return state.userInfo    }    return { state, setUserInfo, getUserInfo }})

        2.2.配置前置路由守卫

        在 router.beforeEach 中根据token配置路由跳转:

// index.ts 路由配置文件import { createWebHistory, createRouter } from 'vue-router'// 引入我们刚才写好的 Pinia 状态import { useUserInfoStore } from '/@/store/userInfo'// 定义路由配置const routes: Array<any> = [    {        path: '/',        redirect: '/home'    },    {        path: '/login',        name: 'Login',        component: () => import('/@/views/login/index.vue')    },    {        path: '/home',        name: 'Home',        component: () => import('/@/views/home/index.vue'),    }]// 创建路由实例const router = createRouter({    history: createWebHistory(),    // 导航历史记录模式    routes})// 导航守卫router.beforeEach((to, from, next) => {     const userInfoStore = useUserInfoStore()    if ((to.path === '/login') && (!userInfoStore.state.userInfo.token)) {        next()    } else {        if (userInfoStore.state.userInfo.token) {            next()        } else {            next('/login')        }    } })// 导出实例export default router

3.效果测试

        项目根路径下(与src目录同级),运行命令行:

# 启动项目$ npm run dev

        可见,现在我们的pinia中没有存储的有token,所以在项目启动时,被全局前置守卫拦截下来,跳转到登录路由。


点击全文阅读


本文链接:http://zhangshiyu.com/post/166590.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 京圈佛子破戒后,我改嫁京圈纨绔(沈墨渊,白晶晶)
  • 前世被闺蜜害死,重生后我让她从太子妃变疯女苏婉儿,清歌完本_前世被闺蜜害死,重生后我让她从太子妃变疯女(苏婉儿,清歌)
  • 全书浏览七零军嫂太彪悍,带三宝上军区离婚(沈清落,陈桂花,陆有为)_七零军嫂太彪悍,带三宝上军区离婚(沈清落,陈桂花,陆有为)全书结局
  • 今天也没变成昨天(周扬陈默)全书免费_(周扬陈默)今天也没变成昨天后续(周扬陈默)
  • 重生后,秦总非要父以子贵(许沐晴,秦越泽)全书浏览_重生后,秦总非要父以子贵全书浏览
  • 他嫌弃我喝两块钱豆浆上不了台面,我结婚后他又哭又闹全书万照,白青青在线
  • 昭然若梦前尘烬列表_昭然若梦前尘烬(温昭然方池雲)
  • 导师借我股票账号,我倒欠五十万(孟潇潇,宁薇)_导师借我股票账号,我倒欠五十万孟潇潇,宁薇
  • 拒绝把外卖券给舍友,竹马送我到迪拜捡垃圾(周钰泽,蒋清清,思源)全书浏览_拒绝把外卖券给舍友,竹马送我到迪拜捡垃圾全书浏览
  • 我的人生,你已出局(程森凌古楚文)_我的人生,你已出局程森凌古楚文
  • 穿书成病娇女配,睁眼就签下离婚协议书(朱楼)_穿书成病娇女配,睁眼就签下离婚协议书
  • 老婆逼我给白月光捐肾,我死后她悔疯了(宋逸晨沈墨白)全书浏览_老婆逼我给白月光捐肾,我死后她悔疯了全书浏览

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1