当前位置: 首页 > news >正文

Vue2 和 Vue3 中使用 Vue Router 的详细过程

Vue2 中使用 Vue Router 的完整过程

1. 安装 Vue Router

npm install vue-router@3
# 或
yarn add vue-router@3

2. 创建路由配置文件

  在 src/router/index.js 中创建路由配置:

import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from '../views/Home.vue'
import About from '../views/About.vue'// 1. 安装路由插件
Vue.use(VueRouter)// 2. 定义路由配置
const routes = [{path: '/',name: 'Home',component: Home,meta: { requiresAuth: true } // 可选:添加路由元信息},{path: '/about',name: 'About',component: About},{path: '/:pathMatch(.*)*', // 404页面redirect: '/'}
]// 3. 创建路由实例
const router = new VueRouter({mode: 'history', // 可选:'hash' 或 'history'base: process.env.BASE_URL,routes,linkActiveClass: 'active-link', // 可选:自定义激活的链接类名linkExactActiveClass: 'exact-active-link' // 可选:自定义精确匹配的激活类名
})// 4. 路由守卫示例(可选)
router.beforeEach((to, from, next) => {console.log(`${from.path} 导航到 ${to.path}`)next() // 必须调用 next() 以继续导航
})export default router

3. 在主入口文件中使用路由

  在 src/main.js 中:

import Vue from 'vue'
import App from './App.vue'
import router from './router'new Vue({router, // 注入路由render: h => h(App)
}).$mount('#app')

4. 在组件中使用路由

<template><div><!-- 路由链接 --><router-link to="/" exact>首页</router-link><router-link to="/about">关于</router-link><!-- 路由视图 --><router-view></router-view><!-- 编程式导航 --><button @click="goToAbout">跳转到关于页</button></div>
</template><script>
export default {methods: {goToAbout() {this.$router.push('/about')// 或 this.$router.replace('/about') 替换当前路由}},// 路由守卫(组件内)beforeRouteEnter(to, from, next) {console.log('进入组件前')next()},beforeRouteLeave(to, from, next) {console.log('离开组件前')next()}
}
</script>

Vue3 中使用 Vue Router 的完整过程

1. 安装 Vue Router

npm install vue-router@4
# 或
yarn add vue-router@4

2. 创建路由配置文件

  在 src/router/index.js 中:

import { createRouter, createWebHistory } from 'vue-router'
import Home from '../views/Home.vue'
import About from '../views/About.vue'// 1. 定义路由配置
const routes = [{path: '/',name: 'Home',component: Home,meta: { requiresAuth: true } // 可选:添加路由元信息},{path: '/about',name: 'About',component: About},{path: '/:pathMatch(.*)*', // 404页面redirect: '/'}
]// 2. 创建路由实例
const router = createRouter({history: createWebHistory(process.env.BASE_URL), // 或 createWebHashHistory()routes,linkActiveClass: 'active-link', // 可选:自定义激活的链接类名linkExactActiveClass: 'exact-active-link' // 可选:自定义精确匹配的激活类名
})// 3. 路由守卫示例(可选)
router.beforeEach((to, from, next) => {console.log(`${from.path} 导航到 ${to.path}`)next() // 必须调用 next() 以继续导航
})export default router

3. 在主入口文件中使用路由

  在 src/main.js 中:

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'const app = createApp(App)
app.use(router) // 注入路由
app.mount('#app')

4. 在组件中使用路由(组合式 API)

<template><div><!-- 路由链接 --><router-link to="/" exact>首页</router-link><router-link to="/about">关于</router-link><!-- 路由视图 --><router-view></router-view><!-- 编程式导航 --><button @click="goToAbout">跳转到关于页</button></div>
</template><script setup>
import { useRouter } from 'vue-router'const router = useRouter()const goToAbout = () => {router.push('/about')// 或 router.replace('/about') 替换当前路由
}// 路由守卫(组合式 API)
import { onBeforeRouteLeave, onBeforeRouteUpdate } from 'vue-router'onBeforeRouteLeave((to, from) => {console.log('离开组件前')
})onBeforeRouteUpdate((to, from) => {console.log('路由更新前')
})
</script>

关键区别总结

特性Vue2 (Vue Router 3)Vue3 (Vue Router 4)
安装命令npm install vue-router@3npm install vue-router@4
创建路由new VueRouter()createRouter()
历史模式mode: 'history'createWebHistory()
路由注入直接在 Vue 构造函数中app.use(router)
组件内路由选项式 API组合式 API (useRouter)
路由守卫beforeRouteEnteronBeforeRouteLeave

最佳实践

  1. 路由懒加载:使用动态导入提高性能

    component: () => import('../views/About.vue')
    
  2. 路由元信息:用于权限控制等

    meta: { requiresAuth: true }
    
  3. 404 处理:始终配置通配符路由

  4. 命名视图:复杂布局时使用

    routes: [{path: '/',components: {default: Home,sidebar: Sidebar}}
    ]
    
  5. 滚动行为:控制路由切换时的滚动位置

    const router = createRouter({scrollBehavior(to, from, savedPosition) {if (savedPosition) {return savedPosition} else {return { top: 0 }}}
    })
    
http://www.dtcms.com/a/418707.html

相关文章:

  • 微服务项目->在线oj系统(Java-Spring)-后台管理(2)
  • 【MySQL体系】第2篇:MySQL索引类型和原理
  • flash型的著名网站网站开发公司怎么接单
  • 【第五章:计算机视觉-项目实战之图像分割实战】2.图像分割实战:人像抠图-(1)人像抠图Image Matting算法详解
  • 使用 PyTorch 构建并训练 CNN 模型
  • 如何做电影网站狼视听seo外包优化服务商
  • blender布局工作区突然变得很卡
  • 【计算机视觉】图像去雾技术
  • 工信部网站icp备案号文艺范wordpress主题
  • 树莓派无法播放哔哩哔哩等视频
  • 华为芯片泄密案警示:用Curtain e-locker阻断内部数据泄露
  • 记一次达梦数据库的查询异常
  • 泸州市建设工程管理局网站58网站怎么做品牌推广
  • 个人主题网站设计论文北京seo推广系统
  • AI编程开发系统001-基于SpringBoot+Vue的旅游民宿租赁系统
  • 通用人工智能(AGI):从技术探索到社会重构的 2025 展望
  • 【Web前端|第五篇】Vue进阶(一):Axios工具和前端工程化
  • RISE论文阅读
  • LeetCode 416 分割等和子集
  • web开发,在线%车辆管理%系统,基于Idea,html,css,vue,java,springboot,mysql
  • 《安富莱嵌入式周报》第358期:USB4雷电开源示波器,2GHz带宽,3.2Gsps采样率,开源亚微米级精度3D运动控制平台,沉浸式8声道全景声音频录制
  • Axure: 多级多选可交互树状列表
  • 打破线制,告别电脑:积木易搭发布无线一体式3D扫描仪Toucan
  • 做电影网站的资源从哪里换wordpress新建音乐界面
  • Conda环境激活全指南:bash、conda activate与source activate详解
  • 英国网站后缀爱做的小说网站吗
  • 第四部分:VTK常用类详解(第98章 vtkBalloonWidget气球控件类)
  • Git 应用与规范指南
  • 查网站 备案信息有没有好的网站可以学做头发
  • Leetcode 14. 最长公共前缀