在vue3中,使用新版的vue-router https://router.vuejs.org/zh/
首先安装 npm install vue-router@4
安装免导入插件 https://www.npmjs.com/package/unplugin-auto-import
npm i -D unplugin-auto-import
import AutoImport from 'unplugin-auto-import/vite'
export default defineConfig({
plugins: [
AutoImport({ imports:['vue','vue-router'] }),
],
})
之后,括号中的包就不需要再导入了
前端路由的核心是在改变视图的同时不会向后端发出请求
hash模式与history模式区别:hash模式url里面永远带着#号,在开发当中默认使用这个模式。如果用户考虑url的规范那么就需要使用history模式,因为history模式没有#号,是个正常的url适合推广宣传。同时在功能上,开发app的时候有分享页面,把这个页面分享到第三方的app里,有的app里面url是不允许带有#号的,所以要将#号去除那么就要使用history模式,但是使用history模式还有一个问题就是,在访问二级页面的时候,做刷新操作,会出现404错误,那么就需要和后端人配合让他配置一下apache或是nginx的url重定向,重定向到你的首页路由上。
history模式下,build之后本地 index.html 打开是无效的。hash模式下,build之后本地 index.html 打开正常!
在src目录下新建index.js
import { createRouter, createWebHashHistory } from 'vue-router' // 使用插件可以不加这个
import Home from '../views/Home.vue'
const routes = [
{ path: '/', name:"Home",component: Home },
{ path: '/about',name:"About", component: ()=>import("../views/About.vue") },
]
const router = createRouter({
history: createWebHashHistory('/admin'), // 编写后台就这么写
routes,
})
export default router
在main.js中引用
import router from './router/index.js'
const app = createApp(App)
app.use(router).use(ElementPlus)
编写导航组件,这里用了el组件
<script setup>
const activeIndex = ref('1')
//或者 const route = useRouter()
const route = new useRouter
const about = () => { route.push('/about') }
</script>
<template>
<el-menu :default-active="activeIndex" mode="horizontal">
<el-menu-item index="1">
<router-link to="/">图表</router-link>
</el-menu-item>
<el-menu-item index="4" @click='about'>
关于
</el-menu-item>
</el-menu>
</template>
<style scoped>
</style>
在页面添加
<script setup>
import pageHeader from './components/pageHeader.vue';
</script>
<template>
<pageHeader></pageHeader>
<router-view></router-view>
</template>
导航守卫官方介绍