首页 > 其他分享 >vue3 使用 vue-router

vue3 使用 vue-router

时间:2023-10-03 21:56:44浏览次数:41  
标签:vue const vue3 source import router path

安装 vue-router

pnpm i vue-router

使用 vue-router

创建自己的 router

// @/route/index.ts
import {createRouter, createWebHashHistory} from 'vue-router'
import type {RouteRecordRaw} from "vue-router"

const routes: RouteRecordRaw[] = [
    {
        path: '/',
        redirect: "/dashboard/console",
        meta: {
            hidden: true,
            title: "首页面板"
        },
    },
    {
        path: '/demo',
        component: () => import('@/view/demo/demo.vue'),
        meta: {
            hidden: true,
            title: "demo 页面"
        },
    },
    {
        path: '/login',
        component: () => import('@/view/account/login.vue'),
        meta: {
            hidden: true,
            title: '登录'
        },
    }
]

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

添加拦截器

// @/route/index.ts

// 需要安装 nprogress `pnpm i nprogress`
// import NProgress from "nprogress";
// import "nprogress/nprogress.css";
import type { NavigationGuardNext, RouteLocationNormalized} from "vue-router";

const parseJSON =  (source: string | object | null) => {
  if(!source) return source;
  if(source instanceof Object) return JSON.parse(JSON.stringify(source));
  if(typeof source === 'string') return JSON.parse(source);
}

router.beforeEach(async (to: RouteLocationNormalized, from: RouteLocationNormalized, next: NavigationGuardNext) => {
    // 添加进度条
    // NProgress.start();
    const {meta} = to
    // 设置标题
    document.title = `back-end-${meta.title}`
    // 使用 pinia 创建的 store,state 里保存的登录的 JWT token 和 用户可以访问的 menu
    const userStore = useUserStore()
    const token = userStore.token;       // JWT token
    const menu = userStore.menu; // menu list
    const userMenuList: Array<RouteRecordRaw> = parseJSON(menu)

    if (!to.fullPath.includes('login') && !token) {
        next({path: '/login'})
    }

    if (userMenuList.filter(route => route.path === to.path).length !== 0) {
        next()
    }

    next("/demo")
})

router.afterEach((_, _, _) => {
    // 添加进度条
    // NProgress.done();
})

在 main.ts 里挂载 vue-router

import {createApp} from 'vue'
import App from './App.vue'
import router from "@/route/index.ts"

const app = createApp(App);
app.use(router);
app.mount("#app");

标签:vue,const,vue3,source,import,router,path
From: https://www.cnblogs.com/fires/p/17741675.html

相关文章

  • 1小时学会Vue之VueRouter&Vuex 学习笔记
    https://www.bilibili.com/video/BV1zF411R7cR/开发工具推荐vue-devtool  地址 https://devtools.vuejs.org/guide/installation.html一 router动态路由嵌套路由编程式导航导航守卫 二vuex ......
  • 超级实用!React-Router v6实现页面级按钮权限
    大家好,我是王天~今天咱们用reac+reactRouter来实现页面级的按钮权限功能。这篇文章分三部分,实现思路、代码实现、踩坑记录。嫌啰嗦的朋友,直接拖到第二章节看代码哦。前言通常情况下,咱们为用户添加权限时,除了页面权限,还会细化到按钮级别,比如、新增、删除、查看等权限。如下效......
  • Vue进阶(幺捌肆):CodeMirror 应用小结
    (文章目录)一、前言CodeMirror支持在线编辑代码,风格包括js,java,php,c++等等100多种语言。能够做到代码自动补全,代码折叠,可配置键盘事件,支持vim,emacs,sublimetext编码风格、能完成查找替换,括号匹配,分栏显示,显示行号,自行配置字体大小和风格等。二、应用下载codemirror......
  • vue 数据data-uniapp
    data属性data必须声明为返回一个初始数据对象的函数(注意函数内返回的数据对象不要直接引用函数外的对象);否则页面关闭时,数据不会自动销毁,再次打开该页面时,会显示上次数据。 //正确用法,使用函数返回对象 data(){ return{ title:'Hello' } } //错误写法,会导致再次......
  • vue2 指令- unaipp
    指令指令是有v-前缀的特殊属性。指令属性的值预期是单个JavaScript表达式(v-for是例外情况)。指令的作用是,当表达式的值改变时,将其产生的连带影响,响应式地作用于DOM。一些指令能够接收一个“参数”,在指令名称之后以冒号(:)表示。v-bind动态地绑定一个或多个属性,或......
  • 手撕Vue-构建Vue实例
    前言要想使用Vue必须先创建Vue的实例,创建Vue的实例通过new来创建,所以说明Vue是一个类,所以我们要想使用自己的Vue,就必须定义一个名称叫做Vue的类。只要创建好了Vue的实例,Vue就会根据指定的区域和数据,去编译渲染这个区域,所以我们需要在自己编写的Vue实例中拿到数据和控制......
  • vue 学习笔记
    https://www.bilibili.com/video/BV13m4y1Y7MD安装vuecli1安装 node.js要求node.js12+版本, https://nodejs.org/zh-cn 首页下载安装lts版本,如果已安装就覆盖安装vscode终端或cmd中输入npm--vesion  node--v可以查看是否安装成功npm(nodepackagemanager):no......
  • vue框架
    1、vue框架vue框架的简单使用如下所示,并且是双向数据绑定的:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>测试四</title><!--引入vue框架--><scriptsrc="../js/vue.js">......
  • vue3+vite+ elementplus项目部署到gitee pages并发布
    1.在gitee上新建仓库命名:demo-vite-vue32.把新建的仓库克隆到本地3.在本地的master分支编写代码并上传把分支定位在master分支上通过git工具把本地完成的代码上传到gitee的demo-vite-vue3仓库中去gitpullgitadd.gitcommit-m"提交代......
  • Vue框架快速上手
    Vue基础vue指令内容绑定v-text设置标签的内容一般通过双大括号的表达式{{}}去替换内容{{hello}}v-html与v-text类似区别在于html中的结构会被解析为标签设置元素的innerHTML,v-text只会解析文本事件绑定v-on可以简写为@,绑定的方法在methods中显示切换v-show原理......