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 原则、…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...

剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...
Caliper 配置文件解析:fisco-bcos.json
config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...

tauri项目,如何在rust端读取电脑环境变量
如果想在前端通过调用来获取环境变量的值,可以通过标准的依赖: std::env::var(name).ok() 想在前端通过调用来获取,可以写一个command函数: #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...

Visual Studio Code 扩展
Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后,命令 changeCase.commands 可预览转换效果 EmmyLua…...