Vue进阶之旅:核心技术与页面应用实战(路由进阶)
文章目录
- 一、路由模块封装
- 二、声明式导航
- (一)导航链接与高亮
- (二)声明式导航传参
- 1. 查询参数传参
- 2. 动态路由传参
- 三、路由重定向、404 与模式设置
- (一)路由重定向
- (二)路由 404
- (三)路由模式设置
- 四、编程式导航
- (一)基本跳转
- (二)路由传参
- 五、综合案例:面经基础版
- (一)配路由
- (二)实现功能
在 Vue 开发中,路由是一个至关重要的部分,它能够帮助我们构建出复杂且流畅的单页面应用。今天深入学习了 Vue 路由的进阶知识,现在来总结一下所学的重点内容。
一、路由模块封装
在项目中,将路由模块进行抽离是一个很好的实践方式。以前可能所有的路由配置都堆在 main.js
中,这样会使代码变得难以维护。现在我们可以把路由配置单独放在一个文件中,比如在 src/router/index.js
中进行配置。
// 引入 VueRouter
import VueRouter from 'vue-router';
// 引入组件
import Find from './views/Find';
import My from './views/My';
import Friend from './views/Friend';// 创建 VueRouter 实例
const router = new VueRouter({routes: [{ path: '/find', component: Find },{ path: '/my', component: My },{ path: '/friend', component: Friend }]
});// 导出 router 实例,以便在 main.js 中使用
export default router;
然后在 main.js
中引入并使用这个路由模块:
import Vue from 'vue';
import App from './App.vue';
// 引入路由模块
import router from './router/index.js';Vue.use(VueRouter);new Vue({render: h => h(App),router
}).$mount('#app');
这样做的好处是拆分了模块,更利于项目的维护和扩展。
二、声明式导航
(一)导航链接与高亮
vue-router
提供了 router-link
这个全局组件来替代传统的 a
标签。它有两个重要的属性:
to
:用于指定跳转的路径,这是必须要设置的属性,其本质还是实现跳转功能的a
标签,但使用to
属性时无需像传统a
标签那样加#
。例如:
<router-link to="/find">发现音乐</router-link>
- 它默认会提供高亮类名,当路由匹配时会自动给当前导航添加两个类名:
router-link-active
:用于模糊匹配,例如to="/my"
可以匹配/my
、/my/a
、/my/b
等路径。router-link-exact-active
:用于精确匹配,例如to="/my"
仅可以匹配/my
路径。
在实际应用中,我们可以根据需求自定义这两个高亮类名,通过在创建 VueRouter
实例时设置 linkActiveClass
和 linkExactActiveClass
属性来实现:
const router = new VueRouter({routes: [...],linkActiveClass: "类名 1", linkExactActiveClass: "类名 2"
});
(二)声明式导航传参
1. 查询参数传参
- 语法格式为:
to="/path?参数名=值"
。例如:
<router-link to="/search?words=黑马程序员">搜索</router-link>
- 在对应的页面组件中,可以通过
$route.query.参数名
来接收传递过来的值。
2. 动态路由传参
- 首先需要配置动态路由,例如:
const router = new VueRouter({routes: [{ path: '/search/:words', component: Search }]
});
- 然后配置导航链接为:
to="/path/参数值"
,如:
<router-link to="/search/黑马程序员">搜索</router-link>
- 在对应的页面组件中,通过
$route.params.参数名
来接收传递过来的值。
这两种传参方式各有特点,查询参数传参比较适合传递多个参数,而动态路由传参则更加优雅简洁,适合传递单个参数。
三、路由重定向、404 与模式设置
(一)路由重定向
当网页打开时,url
默认是 /
路径,如果未匹配到组件就会出现空白。这时可以使用路由重定向来解决这个问题。语法为:{ path: 匹配路径, redirect: 重定向到的路径 }
。例如:
const router = new VueRouter({routes: [{ path: '/', redirect: '/home' },{ path: '/home', component: Home }]
});
(二)路由 404
当路径找不到匹配时,我们可以设置一个 404 提示页面。在路由配置中,将 404 页面的路由配置放在最后,语法为:path: "*"
(表示任意路径)。且 NotFind 是view中另起一个,不要忘记导包嗷!例如:
const router = new VueRouter({routes: [{ path: '/home', component: Home },{ path: '/', redirect: '/home' },{ path: '/search/:words?', component: Search },{ path: '*', component: NotFind }]
});
(三)路由模式设置
默认的路由模式是 hash
路由,例如:http://localhost:8080/#/home
,这种模式下路径看起来会有 #
,不太自然。我们可以将其设置为 history
路由(常用),例如:http://localhost:8080/home
,但需要注意的是,history
路由在上线时需要服务器端的支持。设置方式如下:
const router = new VueRouter({routes,mode: "history"
});
四、编程式导航
(一)基本跳转
编程式导航是通过 JS
代码来实现路由跳转的,有两种语法:
path
路径跳转:
this.$router.push('路由路径');
// 或者
this.$router.push({ path: '路由路径' });
这种方式简易方便,适合路径较短的情况。
name
命名路由跳转:这种方式适合path
路径较长的场景。首先需要在路由配置中给路由定义一个name
属性,例如:
const router = new VueRouter({routes: [{ name: 'routeName', path: '/path/xxx', component: XXX }]
});
然后在跳转时使用:
this.$router.push({ name: '路由名' });
(二)路由传参
编程式导航也支持查询参数和动态路由传参,并且对于两种跳转方式(path
路径跳转和 name
命名路由跳转)都适用。
path
路径跳转传参:query
传参:
this.$router.push('/路径?参数名 1=参数值 1&参数 2=参数值 2');
// 或者
this.$router.push({ path: '/路径', query: { 参数名 1: '参数值 1', 参数名 2: '参数值 2' } });
在接收页面通过 $route.query.参数名
获取参数。
- 动态路由传参(需要配动态路由):
this.$router.push('/路径/参数值');
// 或者
this.$router.push({ path: '/路径/参数值' });
在接收页面通过 $route.params.参数名
获取参数。
name
命名路由跳转传参:query
传参:
this.$router.push({ name: '路由名字', query: { 参数名 1: '参数值 1', 参数名 2: '参数值 2' } });
在接收页面通过 $route.query.参数名
获取参数。
- 动态路由传参(需要配动态路由):
this.$router.push({ name: '路由名字', params: { 参数名: '参数值' } });
在接收页面通过 $route.params.参数名
获取参数。
五、综合案例:面经基础版
(一)配路由
- 配置了首页和面经详情两个一级路由,同时首页内嵌四个可切换页面(嵌套二级路由)。例如:
const router = new VueRouter({routes: [{ path: '/', redirect: '/home' },{ path: '/home', component: Home },{ path: '/detail/:id', component: Detail },{path: '/home',component: Home,children: [{ path: 'page1', component: Page1 },{ path: 'page2', component: Page2 },{ path: 'page3', component: Page3 },{ path: 'page4', component: Page4 }]}]
});
(二)实现功能
- 首页请求渲染:在首页组件的生命周期函数中进行数据请求和页面渲染。
- 跳转传参到详情页并渲染:通过路由传参将数据传递到详情页,在详情页组件中接收参数并进行页面渲染。
- 组件缓存:利用
keep-alive
组件来缓存组件,提高性能。例如:
<template><div class="h5-wrapper"><keep-alive><router-view></router-view></keep-alive></div>
</template>
keep-alive
是 Vue 的内置组件,当它包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。它有几个重要的属性和钩子函数:
- 属性:
include
:组件名数组,只有匹配的组件会被缓存。例如:<keep-alive :include="['LayoutPage']">
。exclude
:组件名数组,任何匹配的组件都不会被缓存。max
:最多可以缓存多少组件实例。
- 钩子函数:
activated
:当组件被激活(使用)的时候触发,即进入页面时触发。例如:
activated () {console.log('actived 激活 → 进入页面');
}
deactivated
:当组件不被使用的时候触发,即离开页面时触发。例如:
deactivated() {console.log('deactived 失活 → 离开页面');
}
通过这些路由进阶知识的学习,我们能够更好地构建 Vue 应用,实现复杂的页面交互和功能。在实际项目中,根据具体需求灵活运用这些知识,能够提升项目的质量和用户体验。
相关文章:
Vue进阶之旅:核心技术与页面应用实战(路由进阶)
文章目录 一、路由模块封装二、声明式导航(一)导航链接与高亮(二)声明式导航传参1. 查询参数传参2. 动态路由传参 三、路由重定向、404 与模式设置(一)路由重定向(二)路由 404&#…...

单片机存储器和C程序编译过程
1、 单片机存储器 只读存储器不是并列关系,是从ROM发展到FLASH的过程 RAM ROM 随机存储器 只读存储器 CPU直接存储和访问 只读可访问不可写 临时存数据,存的是CPU正在使用的数据 永久存数据,存的是操作系统启动程序或指令 断电易失 …...
Vue.js 动态设置表格最大高度的实现
概述 在现代 Web 开发中,响应式设计至关重要,尤其是在处理复杂的布局和数据表格时。表格通常会受到多种因素的影响,如分页、合计行或动态内容,这可能导致表格高度的变化。本文将介绍一个基于 Vue.js 的方法 setMaxHeight…...

Java测试开发平台搭建(九)前端
1. 搭建前端vue环境 Vue3 安装 | 菜鸟教程 2. 创建项目 1.进入ui vue ui 2. create项目 3. 成功之后添加插件: cli-plugin-router vue-cli-plugin-vuetify 4. 添加依赖 axios 5. 点击任务开始运行 如果报错: 修改vue.config.jsconst { defineConfig }…...
MySQL多表查询练习
1.找出销售部门中年纪最大的员工的姓名 mysql> select name,age from dept a ,emp_new b where a.dept1b.dept2 and dept_name销售order by age desc limit 1; ------------ | name | age | ------------ | 荣七 | 64 | ------------ 1 row in set (0.00 sec) 2.求财务…...

低代码运维与管理服务
文章目录 前言一、服务内容二、服务范围三、服务流程四、服务交付件五、责任矩阵六、验收标准 前言 随着云计算技术的发展,数字化转型是企业的必然选择,企业需要实现广泛的连接并走向开放,传统集成工具无法满足当前企业面临的数字化转型诉求…...
【机器学习:三十二、强化学习:理论与应用】
1. 强化学习概述 **强化学习(Reinforcement Learning, RL)**是一种机器学习方法,旨在通过试验与反馈的交互,使智能体(Agent)在动态环境中学习决策策略,以最大化累积奖励(Cumulative…...

解决wordpress媒体文件无法被搜索的问题
最近,我在wordpress上遇到了一个令人困扰的问题:我再也无法在 WordPress 的媒体库中搜索媒体文件了。之前,搜索媒体非常方便,但现在无论是图片还是其他文件,似乎都无法通过名称搜索到。对于我这样需要频繁使用图片的博主来说,这简直是个大麻烦。 问题源头 一开始,我怀…...

【2024年华为OD机试】(B卷,100分)- 增强的strstr (Java JS PythonC/C++)
一、问题描述 题目描述 C 语言有一个库函数 char *strstr(const char *haystack, const char *needle),用于在字符串 haystack 中查找第一次出现字符串 needle 的位置,如果未找到则返回 null。 现要求实现一个 strstr 的增强函数,可以使用…...

【前端】CSS学习笔记
目录 CSS的简介CSS的概念语法 CSS的引入方式内联样式(行内样式)内部样式外部样式(推荐) 选择器全局选择器元素选择器类选择器ID选择器合并选择器后代选择器子选择器相邻兄弟选择器通用兄弟选择器伪类选择器:link:visited:hover:ac…...

项目架构调整,新增sunrays-combinations模块
文章目录 1.介绍2.环境搭建1.sunrays-framework下新建sunrays-combinations模块2.删除src3.pom.xml4.查看是否交给sunrays-framework管理5.删除sunrays-common中module引用的common-core-starter6.sunrays-combinations统一管理子模块7.common-all-starter的父模块修改为sunray…...

linux网络编程11——线程池
1. 线程池 1.1 池化技术原理 池化技术 当一个资源或对象的创建或者销毁的开销较大时,可以使用池化技术来保持一定数量的创建好的对象以供随时取用,于是就有了池式结构。常见的池式结构包括线程池、内存池和连接池。 池化技术应用的前提条件主要包括三…...

MySQL - 主从同步
1.主从同步原理: MySQL 主从同步是一种数据库复制技术,它通过将主服务器上的数据更改复制到一个或多个从服务器,实现数据的自动同步。 主从同步的核心原理是将主服务器上的二进制日志复制到从服务器,并在从服务器上执…...

基于微信小程序的安心陪诊管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...

深入剖析iOS网络优化策略,提升App性能
一、引言 在当今移动互联网时代,iOS 应用的网络性能直接关系到用户体验。无论是加载速度缓慢、频繁的网络错误,还是高额的流量消耗,都可能导致用户流失。因此,iOS 网络优化成为开发者提升应用质量、增强用户满意度的关键环节。本文…...
游戏开发中常用的设计模式
目录 前言一、工厂模式二、单例模式三、观察者模式观察者模式的优势 四、状态模式状态模式的优势 五、策略模式策略模式的优势 六、组合模式七、命令模式八、装饰器模式 前言 本文介绍了游戏开发中常用的设计模式,如工厂模式用于创建对象,单例模式确保全…...
【PyCharm】远程连接Linux服务器
【PyCharm】相关链接 【PyCharm】连接Jupyter Notebook【PyCharm】快捷键使用【PyCharm】远程连接Linux服务器【PyCharm】设置为中文界面 【PyCharm】远程连接Linux服务器 PyCharm 提供了远程开发的功能,使得开发者可以在本地编辑代码或使用服务器资源。 下面将详…...

InVideo AI技术浅析(五):生成对抗网络
一、特效生成 1. 工作原理 特效生成是计算机视觉中的高级应用,旨在通过算法生成高质量的视觉特效,如风格迁移、图像到图像的翻译等。InVideo AI 使用生成对抗网络(GAN)来实现这一功能。GAN 通过生成器和判别器两个网络的对抗训练,生成逼真的视觉特效。 2. 关键技术模型…...

Spring自定义BeanPostProcessor实现bean的代理
上文中:https://blog.csdn.net/qq_26437925/article/details/145241149 大致了解了spring aop的代理的实现,其实就是有个BeanPostProcessor代理了bean对象。 本文直接编写最简单的代码直观感受下 bean A: Service public class A {public A() {System.…...

【HF设计模式】06-命令模式
声明:仅为个人学习总结,还请批判性查看,如有不同观点,欢迎交流。 摘要 《Head First设计模式》第6章笔记:结合示例应用和代码,介绍命令模式,包括遇到的问题、采用的解决方案、遵循的 OO 原则、…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...

使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...
小木的算法日记-多叉树的递归/层序遍历
🌲 从二叉树到森林:一文彻底搞懂多叉树遍历的艺术 🚀 引言 你好,未来的算法大神! 在数据结构的世界里,“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的,它…...

五子棋测试用例
一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏,有着深厚的文化底蕴。通过将五子棋制作成网页游戏,可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家,都可以通过网页五子棋感受到东方棋类…...

npm安装electron下载太慢,导致报错
npm安装electron下载太慢,导致报错 背景 想学习electron框架做个桌面应用,卡在了安装依赖(无语了)。。。一开始以为node版本或者npm版本太低问题,调整版本后还是报错。偶尔执行install命令后,可以开始下载…...