「绍棠」vue3.0之路由(vue-router)配置及语法(三)

2024-02-16 14:32:37

在看vue3.0路由之前,我们先来和vue2.0的路由做个对比,看看现在两者之间的区别。

1.1、从引入来说:

vue2.0 ,通过vue-router直接引入vueRouter

import VueRouter from "vue-router";

vue3.0, 通过vue-router引入createRouter, createwebHashHistory | createWebHistory

import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router'

1.2创建实例:

vue2.0,直接创建vueRouter实例

const router = new VueRouter({ mode: "history", base: process.env.BASE_URL, routes, });

vue3.0,调用createRouter方法

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

1.3从路由跳转:

vue2.0,直接$router

this.$router.push({path: 路径, query: 参数})

vue3.0,调用useRouter方法

import { useRouter } from 'vue-router' const router = useRouter(); router.push('/')

上面我们看了vue3.0的vue2.0的区别,那么接下来,我们看看vue3.0路由(router的写法)

2.1、路由表配置

创建router.ts,在其中写路由 const routes: Array = [ { path: '/', name: 'supplier', component: () => import(/* webpackChunkName: "body" */ '../views/supplier/index.vue') meta: { icon: 'ion:grid-outline', title: '供应商', orderNo: 4, }, }, { path: '/login', name: 'login', component: () => import(/* webpackChunkName: "login" */ '../views/user/login/index.vue') meta: { title: '登录', }, } ]; exprot default routes

2.2、路由出口

创建router下的index.ts // 从vue-router中引入createRouter,以及模式 import { createRouter, createWebHashHistory } from 'vue-router' // 引入routes.ts文件 import routes from './routes.ts' const router = createRouter({ history: createWebHashHistory(), //createWebHashHistory是hash模式 routes }); export default router

2.3、注入项目

// 在main.ts/js里面 import router from './router' createApp(App).use(router).mount('#app')

上面就是vue-router的引入以及简单配置,那么接下来看看vue-router的页面跳转及传参

3.1、页面跳转及传参、

//从vue中引入router import { useRouter } from "vue-router"; const router = useRouter(); //router 包含router对象的内容;如下图 // 跳转我们可以使用 router.push() // 不带参数,直接填写路径,写法 router.push('path路径') || router.push({path: "path路径"}) ||router.push({name: 'name名字'}) // 带参数 router.push({path: 'path路径', query: '参数'}) router.push({name: 'name名字', params: '参数'})

3.2、接参

// 引入route import { useRoute } from "vue-router"; const route = useRoute() // route参数,如下图 // 如果对应params传递参数 route.params.参数值 // 如果使用query传参 route.query.参数

以上内容就是vue-router里面的参数以及页面跳转,参数,接参的方式。其中路由中重定向(redirect),路由守卫并没有变化。那么我们来看看路由守卫的前置守卫

路由守卫-前置守卫(beforeEach)

const WhiteList = ['/login']; // 配置白名单 router.beforeEach((to, from, next)=> { if (WhiteList.indexOf(to.fullPath) !== -1) { // 判断前往页面是都存在于白名单 next() } else { if (localStorage.getItem('userInfo')) {// 判断用户是否d登录 if (to.name) { // 判断是否存在路由的name名字,如果有则代表有路由表已经存在,name继续前往,反之,则不存在 next() } else {// 当路由不存在,录取路由,动态添加路由表, let localRoutes: any = localStorage.getItem('routes'); let recursionList = recursionParam(JSON.parse(localRoutes)); for (let item of recursionList) { router.addRoute(item) } next({ ...to, replace: true }) } } else { next('/login') } } });

注意哦:

vue3.0中的addRoute()添加的是路由对象,而不是整个路由数组。

vue2.0是addRoutes(),直接添加路由表的数组。