• vite+vue3+ts中的vue-router基本配置


    其实vue-router配置比较简单了,之前写过一篇非ts的配置:vite2 + vue3 中 vue-router4 基本使用(路由基本配置) 大家有兴趣可以看看,加上ts其实就是多了类型的约束,vue-router中已经给我们提供了RouteRecordRaw类型,可能我们需要在路由对象中自定义配置属性的时候就得去扩展一下RouteRecordRaw类型了,下面就介绍下

    1. 首先安装 

    npm i vue-router@4

    2. 配置相关 

     ① 配置别名

    vite.config.ts  

      

    代码: 

    1. import { defineConfig } from 'vite'
    2. import vue from '@vitejs/plugin-vue'
    3. const path = require('path')
    4. import AutoImport from 'unplugin-auto-import/vite'
    5. import Components from 'unplugin-vue-components/vite'
    6. import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
    7. // https://vitejs.dev/config/
    8. export default defineConfig({
    9. plugins: [
    10. vue(),
    11. AutoImport({
    12. resolvers: [ElementPlusResolver()],
    13. }),
    14. Components({
    15. resolvers: [ElementPlusResolver()],
    16. })
    17. ],
    18. // 别名
    19. resolve: {
    20. alias: {
    21. //设置别名
    22. '@': path.resolve(__dirname, './src')
    23. }
    24. }
    25. })

    注意:如果这时候给你报一个require is not defind,我们可以 npm i @types/node --save-dev装一下,然后在tsconfig.json中配置compilerOptions.types: ["node"],compilerOptions.paths: {"@": ["src"], "@/*": ["src/*"]}如果没报上面错误就可以忽略

    报这个原因就是vite中不能使用require的,在vue-cli3搭建的vue2项目中可以使用是因为webpack帮我们解决了 

    ② 路由配置 

    @/router/index.ts 

    1. import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router'
    2. import viewsRouter from './views'
    3. import pageRouter from './page'
    4. // 对RouteRecordRaw类型进行扩展
    5. export type AddRouteRecordRaw = RouteRecordRaw & {
    6. hidden?: boolean
    7. }
    8. const router = createRouter({
    9. history: createWebHashHistory(),
    10. routes: [...viewsRouter, ...pageRouter] as AddRouteRecordRaw[]
    11. })
    12. export default router

    我习惯将咱们的路由中的routes拆分开来,就是登录页、404页面、断网页面、锁屏页面等这类的页面单独放一块儿,放在page下,然后主要的业务页面放在views中 ,然后在这里统一引入一下就可以,可以看下这两个拆分开来的文件:

    @/router/page/index.ts 

    1. import { AddRouteRecordRaw } from '../index'
    2. export default [
    3. {
    4. path: '/login',
    5. name: 'login',
    6. hidden: false, // 自定义添加的属性
    7. meta: {
    8. title: '登录'
    9. },
    10. component: () => import('@/page/login.vue')
    11. },
    12. {
    13. path: '/:pathMatch(.*)', // 或者 /:pathMatch(.*)*
    14. name: '404',
    15. hidden: false, // 自定义添加的属性
    16. meta: {
    17. title: '404'
    18. },
    19. component: () => import('@/page/notfount.vue')
    20. }
    21. ] as AddRouteRecordRaw[]

    这里注意404页面,我们在vue2中给path设置*号就会匹配到任何找不到页面,然后我们就会给其跳转到我们自定义的404页面,但是在vue3中移除了*,这里要匹配404页面就得给path设置 "/:pathMatch(.*)",或者 "/:pathMatch(.*)*"才可以

    @/router/views/index.ts 

    1. import { AddRouteRecordRaw } from '../index'
    2. import Layout from '@/views/main.vue'
    3. export default [
    4. {
    5. path: '/',
    6. component: Layout,
    7. name: 'main',
    8. meta: {
    9. title: '容器'
    10. },
    11. redirect: { path: '/index' },
    12. children: [
    13. {
    14. path: 'index',
    15. name: 'index',
    16. meta: {
    17. title: '主页'
    18. },
    19. component: () => import('@/views/pages/index.vue')
    20. }
    21. ]
    22. },
    23. {
    24. path: '/user',
    25. component: Layout,
    26. children: [
    27. {
    28. path: 'index',
    29. name: 'user',
    30. meta: {
    31. title: '用户管理'
    32. },
    33. component: () => import('@/views/pages/user.vue')
    34. }
    35. ]
    36. }
    37. ] as AddRouteRecordRaw[]

    还需要注意的是,vue-router中给我们提供的 RouteRecordRaw  类型中,没有hidden这个属性,我们有时候可能会添加一些自定义属性,做一些想做的事,这时候就得对RouteRecordRaw类型进行扩展,就像上面我会自定义一个 AddRouteRecordRaw 类型对RouteRecordRaw类型进行扩展,及拿过来用的时候就使用 AddRouteRecordRaw 类型就可以了

    最后在main.ts中引入并use一下即可 

    代码: 

    1. import { createApp } from "vue";
    2. import App from "./App.vue";
    3. import store, { key } from "./store";
    4. import router from './router'
    5. import 'element-plus/dist/index.css'
    6. const app = createApp(App)
    7. app.use(store, key).use(router)
    8. app.mount("#app");

     然后路由使用是一样的,基本上就是通过 useRouter 和 useRoute,来实现页面的跳转和传参,在之前的博客也有写过,在开始已经将链接附上,这里就不再赘述。

  • 相关阅读:
    LruCache实现原理
    【无标题】
    WPF之Window无边框拖动、特殊形状、Grid拖拽
    阿里P8大牛手写《分布式系统实战手册》Github一天星标就超78K
    MySQL 详解 存储过程 和 存储函数
    94. Promise 的基本用法?
    【Redis实现秒杀业务②】超卖问题的解决方案
    Electron应用程序生命周期的监听
    黑马程序员前端实战项目---PC端品优购(下)
    2023年中国雷达设备市场规模及市场份额分析[图]
  • 原文地址:https://blog.csdn.net/m0_51431448/article/details/126423161