是 Vue.js 的官方路由。它与 Vue.js 核心深度集成,让用 Vue.js 构建单页应用变得轻而易举。功能包括:
建立项目时 npm init vue app cnpm install vue-router@4 --save
在项目的src/router/index.js 或者 index.ts
import {createRouter, createWebHashHistory} from 'vue-router' import Home from '../views/Home.vue' const routes = [ { path: '/about', component: () => import('../views/About.vue') }, { path: '/home', component: Home, }, { path: '/', redirect: '/home' }, { path: '/login', component: () => import('../views/Login.vue') }, { path: '/user', component: () => import('../views/User.vue'), redirect: '/user/manager', children: [ {path: 'add', component: () => import('../views/UserAdd.vue')}, {path: 'show', component: () => import('../views/UserShow.vue')}, {path: 'manager', component: () => import('../views/UserManager.vue')}, ] } ] const router = createRouter({ history: createWebHashHistory(), routes, }) export default routerApp.vue
<h3>项目首页h3> <router-link to="/home">首页router-link> <router-link to="/login">登录router-link> <router-link to="/user">用户管理router-link> <router-link to="/about">关于我们router-link> <router-view/>User.vue
<h3>用户管理h3> <router-link to="/user/add">添加用户router-link> <router-link to="/user/show">查看用户router-link> <router-link to="/user/manager">管理用户router-link> <router-view/>
在src/main.js入口文件中
import { createApp } from 'vue' import { createPinia } from 'pinia' import App from './App.vue' import router from './router' import './assets/main.css' const app = createApp(App) app.use(createPinia()) app.use(router) app.mount('#app')
route 重定向redirect
404
嵌套路由,子路由
在Goods.vue组件中,声明router-link 和 子路由视口rounter-view
<h1>商品中心,商品列表h1> <router-link to="/goods/show">商品查看router-link> <router-link to="/goods/add">添加商品router-link> <router-link to="/goods/manager">商品管理router-link> <router-view/> Wechat:webrxwp - Mobile:13014577033 - Email:webrx@126.com - QQ:7031633a
{ path: '/goods', component: () => import('../views/Goods.vue'), //默认进入子路由manager redirect: '/goods/manager', children: [ {path: 'show', component: () => import('../views/GoodsShow.vue')}, {path: 'add', component: () => import('../views/GoodsAdd.vue')}, {path: 'manager', component: () => import('../views/GoodsManager.vue')}, ] }
编程式导航
原来的路由导航方式为声明式导航,编程式导航,是通过路由组件对象的api编程方式,直接路由访问。 router.push(url) router.go(-1) router.back()
<h1>首页h1> <button @click="goa(10)">about/10button> <button @click="goback(-3)">go-backbutton> <script lang="ts" setup> import {useRouter} from 'vue-router' const router = useRouter() const goa = id => { router.push(`/about/${id}`) } const goback = n =>{ router.go(n) } script> <style scoped> style> // 字符串路径 router.push('/users/eduardo') // 带有路径的对象 router.push({ path: '/users/eduardo' }) // 命名的路由,并加上参数,让路由建立 url router.push({ name: 'user', params: { username: 'eduardo' } }) // 带查询参数,结果是 /register?plan=private router.push({ path: '/register', query: { plan: 'private' } }) // 带 hash,结果是 /about#team router.push({ path: '/about', hash: '#team' })
定义路由 name:'about 命名
, { path: '/about/:id(\\d+)', name: 'about', component: () => import('../views/About.vue'), props: true }使用声明式导航
"{name:'about',params:{id:10}}">about/10 编程式导航
// 命名的路由,并加上参数,让路由建立 url router.push({ name: 'about', params:{ id: 10 }})
全局导航守卫会拦截每个路由规则,从而对每个路由访问权限的控制