前言:    

        本篇内容不涉及插件的安装以及配置,具体安装及配置篇可以看下面目录,本篇只涉及创建Vite+Vue3+TS基础项目相关内容。不讲废话,简单直接直接开撸。

目录

npm create vite vue3练习2 -- --template vue-ts

npm i vue-router axios -S

 npm i mockjs vite-plugin-mock -D

静态路由运行 

npm run dev

 配置动态路由

 安装并配置pinia

 配置路由守卫 


先看下完整的项目结构。 

E:\vue3练习>npm create vite vue3练习2 -- --template vue-ts

npm create vite 项目名 -- --template vue-ts

 

接下来我们需要安装几个node模块:vue-router、axios和mock。其中vue-router是Vue的路由配置模块,axios是请求包,mock则是前端模拟api接口的包。 

 安装vue-router和axios:

npm i vue-router axios -S

 npm i mockjs vite-plugin-mock -D

安装mockjs和vite-plugin-mock。由于本项目的mock主要用途仅为模拟后端数据接口,所以安装为开发依赖,若打包为生产环境则会失效。 

静态路由运行 

使用此命令运行,vite3默认的运行端口为5173。

npm run dev

 

 浏览器打开http://localhost:5173/

 或者 输入 localhost:5173

 配置动态路由

 安装并配置pinia

动态路由数据应由一个公共的地方进行管理,本文选用vue的状态管理器来实现这个功能。pinia是vue新一代的状态管理器,与vuex作用基本相同,但是功能比vuex更加强大。

npm i pinia -S

 

完成基础配置后,需要在mian.ts中引入pinia,需要注意的是,pinia必须在vue-router之后引入

如果出现:

[Vue Router warn]: Record with path "/PagesOne"

is either missing a "component(s)" or "children" property.

仔细检查路径是不是错了

 配置路由守卫 

路由守卫加载的思路也很简单,假如我们的页面请求路径不是某个指定的路径的时候,我们就在跳转之前先去查询状态管理器中是否存在我们的动态路由,或者该动态路由是否满足我们的跳转要求,如果不满足就请求接口并加载我们的动态路由,并在加载完成后再继续跳转操作。在本项目中,我们的固定页面是Home页面,所以只要我们跳转的不是Home页面,就查询pinia是否存在路由表,如果没有则请求接口获取路由并加载。代码示例如下:

import { RouteRecordRaw, createRouter, createWebHistory } from 'vue-router'
import { useStore } from "../store";
import { GetDynamicRoutes } from '../apis'
 
// 静态路由表
const routes: Array<RouteRecordRaw> = [
    {
        // 路由重定向配置
        path: '/',
        redirect: '/Home'
    }, {
        path: '/Home',
        component: () => import('../views/HomePage.vue')
    }
]
 
// 路由对象
const router = createRouter({
    history: createWebHistory(),
    routes
})
 
// 路由守卫
router.beforeEach((to, from, next) => {
    if (to.path !== '/Home' && to.path !== '/') {
        const store = useStore()
        if (store.routes.length < 1) {
 
            GetDynamicRoutes().then(res => {
                store.addRoutes(res.data.data, router)
                next({ path: to.path, replace: true })
 
            }).catch(_ => {
                next()
            })
 
        } else {
            next()
        }
    } else {
        next()
    }
})
 
export default router

 添加一个404页面

<template>
    <h1>404</h1>
</template>

  /src/router/index.ts

 

import { RouteRecordRaw, createRouter, createWebHistory } from 'vue-router'
import { useStore } from "../store/index";
import { GetDynamicRoutes } from '../apis/index'
 
// 静态路由表
const routes: Array<RouteRecordRaw> = [
    {
        // 路由重定向配置
        path: '/',
        redirect: '/Home'
    }, {
        path: '/Home',
        component: () => import('../views/Home.vue')
    }, {
        path: '/About',
        component: () => import('../views/About.vue')
    },
        // 404页面配置
	{
	    path: '/:catchAll(.*)',
		component: () => import('../views/Error/404.vue')
	}
	
]
 
// 路由对象
const router = createRouter({
    history: createWebHistory(),
    routes
})
 
// 路由守卫
router.beforeEach((to, from, next) => {
    if (to.path !== '/Home' && to.path !== '/') {
        const store = useStore()
        if (store.routes.length < 1) {
 
            GetDynamicRoutes().then(res => {
                store.addRoutes(res.data.data, router)
                next({ path: to.path, replace: true })
 
            }).catch(_ => {
                next()
            })
 
        } else {
            next()
        }
    } else {
        next()
    }
})

export default router

Logo

前往低代码交流专区

更多推荐