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

Vue Router路由原理

Vue Router 是 Vue.js 官方的路由管理器,它与 Vue.js 核心深度集成,使得构建单页应用(SPA)变得非常容易。Vue Router 的主要功能包括动态路由匹配、嵌套路由、编程式导航、命名路由、路由守卫等

Vue Router 原理

  1. 单页应用(SPA):

    • Vue Router 实现了单页应用的路由管理,通过 URL 的变化来渲染不同的视图,而不需要重新加载整个页面。
  2. 路由匹配:

    • Vue Router 会根据当前 URL 匹配相应的路由规则,并渲染对应的组件。
    • 路由规则定义了 URL 模式和对应的组件映射关系。
  3. 历史模式:

    • Vue Router 支持两种历史模式:hashhistory
      • hash 模式使用 URL 的 hash 部分(例如 http://example.com/#/about),适用于所有浏览器。
      • history 模式使用 HTML5 的 History API(例如 http://example.com/about),提供了更美观的 URL,但需要服务器配置支持。
  4. 动态路由:

    • Vue Router 支持动态路由匹配,可以通过路径参数(例如 /user/:id)来捕获 URL 中的动态部分。
  5. 嵌套路由:

    • 支持嵌套路由,可以在一个路由组件中嵌套另一个路由组件,实现复杂的页面结构。
  6. 编程式导航:

    • 除了通过 URL 导航外,还可以通过编程方式(例如 this.$router.push)进行导航。
  7. 路由守卫:

    • 提供了多种路由守卫(全局守卫、路由独享守卫、组件内守卫),可以在导航过程中进行权限控制、数据预加载等操作。

Vue Router 使用方法

安装 Vue Router

首先,你需要安装 Vue Router:

npm install vue-router
创建路由实例

在项目中创建一个路由配置文件,例如 router/index.js

import Vue from 'vue'
import Router from 'vue-router'
import Home from '@/components/Home.vue'
import About from '@/components/About.vue'Vue.use(Router)export default new Router({mode: 'history', // 使用 history 模式routes: [{path: '/',name: 'Home',component: Home},{path: '/about',name: 'About',component: About}]
})
在 Vue 实例中使用路由

main.js 中引入并使用路由实例:

import Vue from 'vue'
import App from './App.vue'
import router from './router'Vue.config.productionTip = falsenew Vue({router,render: h => h(App)
}).$mount('#app')
在模板中使用路由

App.vue 中使用 <router-view> 标签来渲染匹配到的组件:

<template><div id="app"><router-link to="/">Home</router-link> |<router-link to="/about">About</router-link><router-view></router-view></div>
</template><script>
export default {name: 'App'
}
</script>
编程式导航

除了使用 <router-link> 进行导航外,还可以通过编程方式导航:

// 跳转到指定路径
this.$router.push('/about')// 带查询参数的跳转
this.$router.push({ path: '/about', query: { id: 123 } })// 命名路由的跳转
this.$router.push({ name: 'About', params: { id: 123 } })
嵌套路由

在路由配置中定义嵌套路由:

export default new Router({routes: [{path: '/user/:id',component: User,children: [{path: 'profile',component: UserProfile},{path: 'posts',component: UserPosts}]}]
})

User.vue 中使用 <router-view> 渲染子路由:

<template><div><h1>User {{ $route.params.id }}</h1><router-view></router-view></div>
</template>
路由守卫

在路由配置中添加路由守卫:

const router = new Router({routes: [// 路由配置]
})router.beforeEach((to, from, next) => {// 全局前置守卫console.log('Navigating to:', to.path)next()
})router.afterEach((to, from) => {// 全局后置钩子console.log('Navigated to:', to.path)
})

相关文章:

  • 网工_ICMP协议
  • ZYNQ MPSOC之PL与PS数据交互DMA方式
  • MCP 服务器搭建【sse 类型】实现上市公司年报查询总结, 127.0.0.1:8000/sse直接配置配合 Cherry Studio使用简单
  • 讯飞星辰焕新发布!Agent规模化应用的通关密码
  • 学习笔记——《Java面向对象程序设计》-常用实用类
  • 复刻低成本机械臂 SO-ARM100 材料齐活篇
  • 欧拉计划 Project Euler61(循环的多边形数)题解
  • Java中的多态与继承
  • 共筑数字经济新生态 共绘数字中国新蓝图 ——思特奇受邀出席2025年第八届数字中国建设峰会
  • 动画震动效果
  • Java 未来技术栈:从云原生到 AI 融合的企业级技术演进路线
  • PCB设计工艺规范(四)安规要求
  • 1254. 【动态规划】单词的划分
  • 动态规划 -- 子数组问题
  • Java大师成长计划之第8天:Java线程基础
  • 农产品园区展示系统——仙盟创梦IDE开发
  • Kotlin与Jetpack Compose的详细使用指南
  • React 第三十六节 Router 中 useParams 的具体使用及详细介绍
  • 力扣hot100——98.验证二叉搜索树
  • Python 数据智能实战 (4):智能用户分群 - 融合行为
  • 中国证券监督管理委员会党委委员、副主席王建军接受审查调查
  • 日菲同意扩大安全合作,外交部:反对任何在本地区拉帮结派的做法
  • 国家能源局通报上月投诉情况:赤峰有群众反映电费异常增高,已退费
  • “即买即退”扩容提质,上海静安推出离境退税2.0版新政
  • 豆神教育:2024年净利润1.37亿元,同比增长334%
  • 浙江官宣:五一假期,没电、没气、没油车辆全部免费拖离高速