Vue Router的深度解析
引言
在现代Web应用开发中,客户端路由已成为实现流畅用户体验的关键技术。与传统的服务器端路由不同,客户端路由通过JavaScript在浏览器中控制页面内容的更新,避免了页面的全量刷新。Vue Router作为Vue.js官方的路由解决方案,以其简洁和强大的功能,成为构建单页应用的首选工具。
客户端路由允许用户在不同的视图间无缝切换,同时保持应用的响应性和交互性。Vue Router的集成,不仅简化了页面导航的逻辑,还增强了应用的可维护性和扩展性,是前端开发者必须掌握的技能之一。
Vue Router简介
Vue Router是一个专为Vue.js应用程序设计的路由管理器。它允许开发者在单页应用中构建复杂的页面路由逻辑,通过定义URL和组件的映射关系,实现页面的动态加载和导航。Vue Router的核心
创建基本的Vue Router实例
安装Vue Router
-
通过npm或yarn安装
如果你是使用npm作为包管理器,可以通过以下命令安装Vue Router:npm install vue-router
使用yarn的话,命令如下:
yarn add vue-router
-
Vue 2和Vue 3的兼容性
确保你安装的Vue Router版本与你的Vue.js版本兼容。截至2024年,Vue Router 4是为Vue 3设计的。 -
安装相应的Vue版本
如果你的项目中还没有Vue,需要先安装Vue。例如,使用npm安装Vue 3:npm install vue@next
创建Vue Router实例
-
导入Vue和Vue Router
在你的项目入口文件(通常是main.js
或app.js
)中,导入Vue和Vue Router:import Vue from 'vue'; import VueRouter from 'vue-router';
-
使用Vue Router
告诉Vue使用Vue Router插件:Vue.use(VueRouter);
-
定义路由
创建路由对象数组,每个路由对象至少包含path
和component
属性:const routes = [ { path: '/', component: Home },{ path: '/about', component: About } ];
-
创建Router实例
使用定义的路由数组创建Vue Router实例:const router = new VueRouter({ routes, // 简写,相当于 routes: routesmode: 'history' // 可选,使用HTML5 History模式 });
-
在Vue实例中使用Router
将创建的Router实例传递给Vue实例:new Vue({ router, render: h => h(App) // 渲染根组件 }).$mount('#app');
-
使用Router-Link和Router-View
在Vue组件中使用<router-link>
创建导航链接,使用<router-view>
作为渲染组件的出口:<router-link to="/">Home</router-link> <router-link to="/about">About</router-link> <router-view></router-view>
路由对象的结构
在Vue Router中,路由是通过路由对象来定义的。每个路由对象代表应用中的一个页面或视图。路由对象通常包含以下属性:
- path: 字符串,表示URL中的路径部分,用于匹配浏览器的URL。
- component: 组件,当路由匹配成功时,对应的组件将被渲染。
- name: 可选,字符串,给路由命名,用于在导航时可以通过名称引用路由。
- children: 可选,数组,包含子路由的路由对象数组,用于定义嵌套路由。
- meta: 可选,对象,可以包含任何自定义数据,通常用于路由守卫中。
路径(path)和组件(component)的映射
路由对象通过path
属性定义URL路径,通过component
属性定义对应的视图组件。Vue Router会根据当前URL的路径来匹配路由对象,并渲染对应的组件。例如:
const routes = [ { path: '/home', component: Home },{ path: '/about', component: About }];
在这个例子中,访问/home
路径时,Home
组件将被渲染;访问/about
路径时,About
组件将被渲染。
动态路由和参数传递
Vue Router支持动态路由,允许你在路径中定义参数。这些参数在URL中以变量的形式出现,Vue Router会将它们作为参数传递给对应的组件。
-
动态路由的定义:在
path
属性中使用冒号:
来定义参数:{ path: '/user/:id', component: User }
-
参数的传递:当URL匹配到
/user/:id
时,例如/user/123
,id
参数的值123
将作为属性传递给User
组件。 -
组件中访问参数:在组件内部,可以通过
this.$route.params
来访问路由参数: -
this.$route.params.id // '123'
-
使用路由参数的组件:
const User = { template: '<div>User {{ $route.params.id }}</div>' } //渲染的HTML将是<div>User 123</div>
路由组件
路由视图组件的创建
在Vue Router中,路由组件是对应于路由对象的组件,它们定义了当路由匹配时应该渲染的视图。创建路由组件通常遵循以下步骤:
-
定义组件:使用Vue的组件定义方式,创建一个或多个组件来表示不同的视图。
const Home = { template: '<h1>Home Page</h1>' }; const About = { template: '<h1>About Page</h1>' }; //一般正经开发是在单独的文件定义组件,然后用import导入,此处只是为了方便举例子
-
注册路由:在Vue Router的路由配置中,将路径与组件关联起来。
const routes = [ { path: '/', component: Home }, { path: '/about', component: About } ];
-
创建Router实例:使用配置好的路由数组创建Vue Router实例。
const router = new VueRouter({ routes });
使用<router-view>
组件渲染匹配的路由组件
<router-view>
是Vue Router提供的组件,用于渲染当前路由匹配的组件。它的工作原理如下:
-
在模板中使用
<router-view>
:在你的应用的根组件或任何子组件的模板中,添加<router-view>
标签。<div id="app"> <router-view></router-view> </div> //相当于一个占坑的,谁来谁就在这个地方渲染
-
匹配路由:当用户导航到不同的URL时,Vue Router会查找匹配的路由,并渲染对应的组件。
-
渲染组件:
<router-view>
的位置将被替换为当前匹配的组件的实例。 -
嵌套路由:
<router-view>
也支持嵌套路由。在父组件中使用<router-view>
,可以在子组件中进一步使用<router-view>
来渲染更深层次的路由组件。 -
命名视图和编程式导航:除了基本的使用,
<router-view>
还支持命名视图和可以通过编程方式进行导航。
模式选择
Vue Router提供了两种路由模式,分别是hash模式和history模式,它们影响着应用的URL表现和行为。
-
Hash模式
hash模式是Vue Router的默认模式。在这种模式下,URL使用#
符号来标识应用的不同视图。例如,http://example.com/#/home
中的/home
部分就是hash。这种模式的好处是兼容性好,因为它依赖于浏览器的hashchange事件,不受HTML5 History API的限制。 -
History模式(实际开发常用)
history模式使用HTML5 History API来实现无hash的URL。例如,http://example.com/home
。这种模式提供了更美观的URL,但需要服务器配置以支持HTML5 pushState。如果服务器没有正确配置,可能会出现404错误。
模式选择对SEO和用户体验的影响
-
SEO(搜索引擎优化)
- Hash模式:由于URL包含
#
,传统的服务器端SEO可能不会很好地处理这种URL,因为搜索引擎可能不会解析hash之后的路径。 - History模式:提供了更符合SEO标准的URL,有利于搜索引擎爬虫更好地索引应用的不同页面。
- Hash模式:由于URL包含
-
用户体验
- Hash模式:用户在浏览器中输入或分享URL时,URL看起来包含
#
,可能不够美观,但对用户体验的影响较小。 - History模式:提供了更自然的URL,用户在浏览器中输入或分享URL时,看起来更加专业和美观,提升了用户体验。
- Hash模式:用户在浏览器中输入或分享URL时,URL看起来包含
-
服务器配置
使用history模式时,需要确保服务器返回应用的入口页面,无论URL路径如何变化。这通常通过服务器重定向配置实现,例如,在Node.js服务器上,可以使用以下配置:const express = require('express'); const path = require('path');const app = express(); app.use(express.static(path.join(__dirname, 'dist'))); app.get('*', (req, res) => {res.sendFile(path.join(__dirname, 'dist', 'index.html'));});
-
Vue Router配置
在Vue Router中,可以通过mode
选项选择路由模式:const router = new VueRouter({ mode: 'history', // 或 'hash' routes });
嵌套路由的概念和使用场景
概念
嵌套路由是Vue Router允许你在组件内进一步定义子路由的能力。这意味着你可以创建一个多层次的路由结构,其中每个组件都可以有自己的子视图。
使用场景
嵌套路由在以下场景中非常有用:
- 应用具有多层级导航结构。
- 需要在同一个页面内展示多个视图。
- 需要共享相同布局或导航组件的不同页面。
如何配置和使用嵌套路由
-
定义父组件路由
首先,你需要定义一个父组件的路由,就像定义任何其他路由一样。// 定义一个父组件的路由const routes = [ { path: '/user',component: UserLayout, // 假设这是用户页面的布局组件 children: [ // 子路由 { path: '', component: UserHome },{ path: 'profile', component: UserProfile },{ path: 'posts', component: UserPosts } ] } ];
-
配置子路由
在父组件的children
属性中定义子路由。这些子路由将继承父路由的路径前缀。 -
创建父组件
父组件通常是一个具有<router-view>
的布局组件,用于包裹其子组件。<!-- UserLayout.vue --> <template> <div> <router-view></router-view> <!-- 渲染子组件 --> </div> </template>
-
导航到嵌套路由
使用<router-link>
或编程式导航到嵌套路由时,URL将反映嵌套结构。<!-- 导航链接到 /user/profile --><router-link to="/user/profile">Profile</router-link> //某种程度上来讲和a标签很像
-
编程式导航
在JavaScript代码中,可以使用router.push
或router.replace
进行编程式导航到嵌套路由。this.$router.push('/user/profile');
-
访问子路由组件
子路由组件可以通过this.$route
访问当前的路由信息,包括来自父路由的参数。 -
处理动态路由
嵌套路由也支持动态路径。如果父路由和子路由都有动态部分,子路由的组件将接收到从URL中解析出的参数。
嵌套路由是Vue Router强大功能的一部分,它允许开发者构建复杂的应用结构,同时保持组件的组织和可维护性。
结语
通过本文的探讨,我们深入了解了Vue Router在现代Web应用开发中的核心作用。从基础的安装和配置,到复杂的嵌套路由和模式选择,Vue Router提供了一整套解决方案,以满足构建单页应用的各种需求。它不仅简化了前端路由的管理,还极大地提升了应用的性能和用户体验。
相关文章:
Vue Router的深度解析
引言 在现代Web应用开发中,客户端路由已成为实现流畅用户体验的关键技术。与传统的服务器端路由不同,客户端路由通过JavaScript在浏览器中控制页面内容的更新,避免了页面的全量刷新。Vue Router作为Vue.js官方的路由解决方案,以其…...

YOLO-V2
一、V2版本细节升级 1、YOLO-V2: 更快!更强 1.1 做的改进内容 1. YOLO-V2-Batch Normalization V2版本舍弃Dropout,卷积后每一层全部加入Batch Normalization网络的每一层的输入都做了归一化,收敛相对更容易经过Batch Norma…...

pmp考试的通过标准是什么?
PMP考试的是否通过并不是依据类似其他考试的数值成绩,是通过考生收到邮件通知后去主动查询具体的页面得知的。查询页除了电子证书的下载方式,还有成绩报告单的选项以及成绩饼状图,具体如下: 页面中显示“PASS”表示考试通过。 显…...

不懂PyQt5垂直布局?只需3分钟即可学会
PyQt5中实现垂直布局,主要使用QVBoxLayout类。该布局管理器将子控件垂直排列,并可以根据需要自动调整大小。使用QVBoxLayout可以方便地构建从上到下排列的界面元素。 import sys from PyQt5.QtWidgets import QApplication, QVBoxLayout, QWidget, QPus…...

从零开始实现大语言模型(二):文本数据处理
1. 前言 神经网络不能直接处理自然语言文本,文本数据处理的核心是做tokenization,将自然语言文本分割成一系列tokens。 本文介绍tokenization的基本原理,OpenAI的GPT系列大语言模型使用的tokenization方法——字节对编码(BPE, byte pair en…...

生物分子生物学实验过程的自动化与智能监控系统设计
开题报告:生物分子生物学实验过程的自动化与智能监控系统设计 一、引言 随着生物科学技术的飞速发展,生物分子生物学实验在科研、医疗、农业等领域的应用日益广泛。然而,传统的生物分子生物学实验过程大多依赖于人工操作,存在操…...
linux的shell脚本编程详解
Shell 脚本是一种用于自动化任务的脚本语言,在 Linux 和其他类 Unix 操作系统中非常流行。它通常用于任务自动化、系统管理和批处理。编写 Shell 脚本并使其自动化编译过程(例如使用 gcc 编译 C/C 程序)是一种常见的任务。 以下是一个详细的…...

Redis 7.x 系列【11】数据类型之位图(Bitmap)
有道无术,术尚可求,有术无道,止于术。 本系列Redis 版本 7.2.5 源码地址:https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 概述2. 基本命令2.1 SETBIT2.2 GETBIT2.3 BITCOUNT2.4 BITPOS2.5 BITFIELD2.6 BITF…...
如何评定旅游卡的品质与服务?
评定旅游卡的品质与服务,可以从以下几个关键方面进行综合考量: 公司实力与资质:选择有实力、资质齐全的公司发行的旅游卡。查看公司背景,确认其是否长期稳定运营,是否具有旅游行业的专业资质,如旅行社许可证…...

适合学生暑假适用的护眼大路灯有哪些?五款好用护眼灯分享!
在护眼领域,护眼大路灯已经成为越来越多人的选择。这种具备实力的工具可以有效地缓解用眼疲劳、改善光线环境,是学生党和办公族的必备神器。然而,市面上的护眼大路灯品牌众多,如何选择一款性价比高、品质优良的产品呢?…...
linux服务器 部署jenkins
在 Linux 服务器上部署 Jenkins 通常包括以下几个步骤: 更新系统软件包: sudo apt update sudo apt upgrade 安装 Java: Jenkins 需要 Java 运行时环境。推荐使用 OpenJDK 11。 sudo apt install openjdk-11-jdk 添加 Jenkins 软件源并导入…...

电商控价:系统监测的必要性与优势
在品牌的发展进程中,会遭遇各种各样的渠道问题,控价乃是其中颇为关键的一环。品牌进行控价的目的无疑是为了妥善治理低价链接,低价链接的发现途径可以是人工,也可以是系统。力维网络在为上百个品牌提供服务的过程中察觉到…...
港股下半年能恢复上涨趋势吗?
今日港股两大指数涨跌不一,早盘盘初恒指冲高,涨幅一度扩大至1%。截至收盘,香港恒生指数涨0.57%。板块方面,电力、航空、石油、内险股、燃料电池、环保等板块涨幅居前;互动媒体与服务、生物科技、汽车零部件、新经济概念…...
软件测试项目实战:银行贷款业务测试介绍-2
1、利息计算 正常利息贷款本金*借款天数*贷款年利率/360 罚息逾期本金*逾期天数*逾期年利率/360 复利逾期利息*逾期天数*逾期年利率/360 2、贷款五级分类 正常贷款:正常及逾期60天以内 关注贷款:逾期60天及以上,不足90天 次级贷款࿱…...

如何将Hive表的分区字段插入PG表对应的时间戳字段?
文章目录 1、背景描述2、场景分析 1、背景描述 数据仓库的建设通常是为业务和决策服务的。在数仓开发的应用层阶段,BI可以直接从主题层/业务层取数,而前端需要根据具体的作图需求通过后端查询数据库 作图的指标需要根据主题层/业务层做查询计算…...
Spring Boot与MyBatis的集成应用
Spring Boot与MyBatis的集成应用 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们来聊聊Spring Boot与MyBatis的集成应用。MyBatis是一款优秀的持久层框…...

在昇腾服务器上使用llama-factory对baichuan2-13b模型进行lora微调
什么是lora微调 LoRA 提出在预训练模型的参数矩阵上添加低秩分解矩阵来近似每层的参数更新,从而减少适配下游任务所需要训练的参数。 环境准备 这次使用到的微调框架是llama-factory。这个框架集成了对多种模型进行各种训练的代码,少量修改就可使用。 …...
Kafka 管理TCP连接
生产者管理TCP连接 Kafka生产者程序概览 Kafka的Java生产者API主要的对象就是KafkaProducer。通常我们开发一个生产者的步骤有4步: 第1步:构造生产者对象所需的参数对象。 第2步:利用第1步的参数对象,创建KafkaProducer对象实例…...

electron教程(一)创建项目
一、方式① 根据官网描述将electron/electron-quick-start项目克隆下来并启动 electron/electron-quick-start地址: GitHub - electron/electron-quick-start: Clone to try a simple Electron app git clone https://github.com/electron/electron-quick-start…...

如何在Oracle、MySQL、PostgreSQL上终止会话或取消SQL查询
How to Kill session or Cancel SQL query on Oracle , MySQL, PostgreSQL 数据库维护过程中难免会遇到一些不正常的SQL或会话进程正在占用系统大量资源,临时需要终止查询或kill会话,在Oracle, MySQL, Postgresql数据库中不同的操作。 Oracle KILL会话…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...

华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...

[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG
TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码:HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...
Python实现简单音频数据压缩与解压算法
Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中,压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言,提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...

高考志愿填报管理系统---开发介绍
高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发,采用现代化的Web技术,为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## 📋 系统概述 ### 🎯 系统定…...