about
vue3.2.37 + vite3.1.0 + vue-router4.1.6
中文文档:
vue-router是vue的核心的插件库,专门用来实现SPA(Single page web application, SPA)应用。
关于SPA应用
- 单页面web应用。
- 整个应用只有一个完整的页面。
- 点击页面中的导航链接不会刷新整个页面,只会做页面的局部刷新。
- 数据需要通过Ajax请求来获取。
快速上手
1. 安装
# cdn
# 指定版本
<script src="https://unpkg.com/vue-router@4.0.15/dist/vue-router.global.js"></script>
# 最新版
<script src="https://unpkg.com/vue-router@4"></script>
# 通过npm下载指定版本,如4版本
npm install vue-router@4 -S
# 通过yarn下载指定版本,如4版本
yarn add vue-router@4
# 通过yarn下载最新版本
yarn add vue-router@4
我这里用的是4.1.6
版本的。
2. 创建src/router/index.js
文件
javascript
// import {createRouter, createWebHistory, createWebHashHistory, createMemoryHistory} from 'vue-router'
/*
createRouter:创建路由对象
三种路由模式:
createWebHistory:html5路由,官方推荐使用的路由
createWebHashHistory:基于hash的路由,
createMemoryHistory:基于缓存的路由
更多详细解释和各自的弊端,参考官网: https://router.vuejs.org/zh/guide/essentials/history-mode.html
*/
// 这里按需导入
import {createRouter, createWebHistory} from 'vue-router'
// 路由映射表
const routes = [
{
meta: {
title: "luffy2.0-站点首页",
keepAlive: true
},
path: "/", // uri访问地址
name:"Home",
component: ()=> import("../views/Home.vue")
},
{
meta: {
title: "luffy2.0-登录页面",
keepAlive: true
},
path: "/login", // uri访问地址
name:"Login",
component: ()=> import("../views/Login.vue")
},
]
const router = createRouter({
// history指定路由模式
history: createWebHistory(),
// 注册路由列表
routes, // `routes:routes`的缩写
});
// 暴露路由对象
export default router
3. 在src/main.js
中注册
javascript
import { createApp } from 'vue'
import './style.css'
import App from './App.vue'
// 就这一行
import router from "./router/index";
// 然后use使用
createApp(App).use(router).mount('#app')
基本使用
异步加载
javascript
import {createRouter, createWebHashHistory} from 'vue-router'
// 这么导入是同步加载,即访问主页的时候,就加载了该组件,无论你用不用
import Home from "@/components/Home"; // 两种导入组件的形式之1
// import About from "@/components/About"; // 至于.vue可加可不加,不影响的
const routes = [
{
path: "/",
name: "Home",
component: Home,
},
{
path: "/about",
name: "About",
// 这样导入组件是异步加载,只在需要展示该组件的时候,才临时请求加载
component: () => import('@/components/About'), // 两种导入组件的形式之2
}
]
const router = createRouter({
history: createWebHashHistory(),
routes
})
export default router
重定向
meta元数据
meta简单来说就是路由元信息 也就是每个路由身上携带的信息。
title
bash
import {createRouter, createWebHistory} from "vue-router";
import {ElMessage} from 'element-plus'
// 路由映射表
const title = '供应链'
const routes = [
{
meta: {
title: `${title}-登录`,
keepAlive: true
},
path: "/login", // uri访问地址
name: "Login",
component: () => import("../views/LoginView.vue")
},
{
meta: {
title: `${title}-注册`,
keepAlive: true
},
path: "/register", // uri访问地址
name: "Register",
component: () => import("../views/RegisterView.vue")
}
]
const router = createRouter({
// history指定路由模式
history: createWebHistory(),
// 注册路由列表
routes, // `routes:routes`的缩写
});
router.beforeEach((to, from, next) => {
// 结合meta中的title,设置当前页面的title信息
// console.log(111, to.meta.title)
// console.log(111, window.document.title)
window.document.title = to.meta.title || '供应链系统'
// to,即将访问路由对象
// from,当前正要离开路由
// next() 继续向后执行,去to的页面
// next(false) 不跳转,还在当前页面。
// next("/xxx") next({name:"xxx"}) next({pat:"/xxx"})
let token = localStorage.getItem("token");
if (token) {
// 已登录,可以向目标地址访问
next();
return
}
// 未登录,登录页面
if (to.name === "Login" || to.name === "Register") {
// ElMessage.error("登录已过期,请重新登录")
next();
return;
}
// 未登录,访问的其他地址
next({name: "Login"});
})
// 暴露路由对象
export default router
keepAlive
keep-alive
是 Vue 内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染。