单页面应用的特点,什么是路由,VueRouter的下载,安装和使用,路由的封装抽离,声明式导航的介绍和使用
文章目录
- 一.什么是单页面应用?
- 二.什么是路由?
- 生活中的路由和Vue中的路由
- 三.VueRouter(重点)
- 0.引出
- 1.介绍
- 2.下载与使用(5个基本步骤+2个核心步骤)
- 2.1 五个基本步骤
- 2.2 两个核心步骤
- 四.路由的封装抽离
- 五.声明式导航
- 1.导航链接
- 特点一:能跳转
- 特点二:能高亮
- 2.两个高亮类名
- 2.1.区别
- 2.2.为什么支持模糊匹配的类用得更多?
- 2.3.自定义高亮类名
- 3.跳转传参
一.什么是单页面应用?
-
定义和特点:所有功能都在一个HTML中实现
-
示例:网易云音乐
-
多页面应用:京东和淘宝
-
区别:两者的导航栏跳转方式明显不同
-
对比:
-
- 单页只有一个HTML页面,按需更新性能高,开发效率快,用户体验好,但学习成本高,首屏加载慢,SEO较差
-
- 多页即多个HTML页面,整页更新的特点让其性能较低,开发效率一般,用户体验一般,学习成本中等,但首屏加载快,SEO较好
*SEO:搜索引擎优化,可以理解为搜索结果的友好度
- 多页即多个HTML页面,整页更新的特点让其性能较低,开发效率一般,用户体验一般,学习成本中等,但首屏加载快,SEO较好
-
使用场景:
-
- 单页:系统类网站,内部网站,文档类网站,移动端网站
-
- 多页:公司官网,电商类网站
二.什么是路由?
由于单页面应用的按需更新的特点,我们必须明确访问路径和组件的对应关系
这就需要用到路由,它实际上是一种映射关系
生活中的路由和Vue中的路由
路由器:IP和设备之间的映射关系
Vue中的路由:路径和组件之间的映射关系
示例:
http://localhost:8080#home路径 映射到 Home.vue组件
http://localhost:8080#comment路径 映射到 Comment.vue组件
http://localhost:8080#search路径 映射到 Search.vue组件
三.VueRouter(重点)
0.引出
在单页面应用中,点击导航栏的不同标签,
首先,地址栏中的地址要发生变化.其次,导航栏下方的组件也要对应变化
–Vue官方提供了一个插件可实现以上功能,即VueRouter
1.介绍
- 作用:修改地址栏地址时,切换显示匹配的组件
- 本质:Vue官方的一个路由插件,是一个第三方包
2.下载与使用(5个基本步骤+2个核心步骤)
2.1 五个基本步骤
- 下载:下载VueRouter模块到当前工程项目中(Vue.2对应的版本是3.6.5)*
安装命令:yarn add vue-router@3.6.5
注:此命令我按照报错,最后用了这个命令:npm install vue-router@3.6.5 -g对于安装版本的匹配,有个口诀叫"233 344",即:
Vue2+VueRouter3.x+Vuex3.x
"344"同理
- 引入
main.js==>若不考虑路由的封装和抽离,所有路由相关代码可先堆在main.js中import VueRouter from 'vue-router'
- 安装注册
//由于VueRouter是Vue的插件,所以必须先安装注册后才能使用
Vue.use(VueRouter)//内部会对组件进行全局的注册,即插件的初始化
- 创建路由对象
const router=new VueRouter();//此时的路由对象和Vue实例还没有建立关联
- 注入:将路由对象注入到new Vue实例中,建立关联
new Vue({render:h=>h(App),//router:router可简写如下:router
}).$mounted("#app");
//注入完成,代表着这个Vue实例已经被路由对象接管了
//效果:地址栏最后会多出一个"#"
完整代码:main.js
//1.下载:在根目录文件下下载:npm install vue-router@3.6.5 -gmain.js
//2.引入
import VueRouter from "vue-router"
//3.安装注册
Vue.use(VueRouter);//VueRouter插件初始化
//4.创建路由对象
const router=new VueRouter();//后续可以在里面添加路由规则
//5.注入
new Vue({render:h=>h(app),router,//router:router,简写成router,(router:rOther)
}).$mount("#app")//当前vue实例已被路由对象所管理
//成功标志:地址栏多了"#"
2.2 两个核心步骤
- 项目代码
//App.vue
<div class="footer_warp"><a>发现音乐</a><a>我的音乐</a><a>好友</a>
</div>
//新建Views文件夹下的FindMusic.vue,MyMusic.vue和MyFriends.vue三个组件,
//内容随意,引入过程略
- step1:配置规则
//main.js或router/index.jsimport FindMusic from "..."
...
const router =new VueRouter({routes:[//配置规则{path:'/FindMusic',component:FindMusic},{path:'/MyMusic',component:MyMusic},{path:'/MyFriends',component:MyFriends},//此处可直观看到路由的定义:path和component之间的映射
});
*path中的路径没有"."在前面,不要写成相对路径
- step2:配置导航
<a href="#/FindMusic"">发现音乐</a><a href="#/MyMusic">我的音乐</a><a href="#/MyFriends">好友</a><div><!-- 这个标签的位置决定了组件内容展示的位置--><router-view></router-view></div>
最终效果:点击不同的a标签,地址栏显示不同的"#"后的内容
四.路由的封装抽离
把所有的路由配置都放在main.js显然是不合适的,因此要将路由模块抽离出来,更利于维护
- 步骤
把刚刚在main.js 中写的路由相关的代码挪到新建的router/index.js中然后在main,js中导入
import router from "./router/index.js"
- 注意事项
- 把代码放入index.js 后,相对路径会发生变化,此时要么调整成正确的相对路径,要么使用"@"(代表src文件夹),写入绝对路径
- 需要在index.js中重新引入Vue,因为使用到了
Vue.use(VueRouter),其实main.js也有,只是引用语句import Vue from "vue"在main,js中是自动生成的 - 最后需将路由对象导出:
export default router;
五.声明式导航
在Vue2中:
声明式导航就是<router-link to=""></router-link>,<router-link to=""></router-link>就是声明式导航
与声明式导航相对的是编程式导航
1.导航链接
使用vue-router的全局组件<router-link to=""></router-link>代替a标签,可以实现导航高亮效果(当前在哪个tag,它就有不同颜色
特点一:能跳转
<router-link to="/FindMusic">发现音乐</router-link>
to不可省略且不用在路径中加"#",对比a标签:
<a href="#/FindMusic"">发现音乐</a>
特点二:能高亮
声明式导航能实现自动高亮,默认提供高亮类名,可以通过高亮类名设置高亮样式
(在控制台能看到选中的a标签自动获得两个类名)
route-link本质上还是a标签,在控制台查看元素,发现渲染出来的还是<a></a>
2.两个高亮类名
<router-link to=""></router-link>会自动给当前导航添加两个高亮类名,
分别叫:router-link-exact-active和router-link-active
2.1.区别
- router -link-active
这个用得多,它是模糊匹配的
如:a href="#/my"标签中有这个类,那么它将匹配所有以my开头的路径:/my /my/a /my/b - router-link-exact-active
这个类时精确匹配的,写的什么就匹配什么
2.2.为什么支持模糊匹配的类用得更多?
场景:网易云音乐在"发现音乐"的一级导航栏下面还有二级导航栏:推荐,排行榜,歌单等等
此时我们对页面有一个需求,
即用户在二级菜单下来回点击的时候,一级导航栏"发现音乐"要保持高亮状态
这时候就是模糊匹配中的/my/a和/my/b情况(/FindMusic/、 /FindMusic/TopList 和/FindMusic/PlayList)

2.3.自定义高亮类名
这两个类名太长了,可以在router路由对象中进行定制:
//main.js或index.js
const router=new VueRouter({routes:[...],linkActiveClass:"新类名1",//比如"active"linkExactActiveClass:"新类名2",//比如:"exact-active"
});
//style
.active{}
.exact-active{}
3.跳转传参
相关文章:
单页面应用的特点,什么是路由,VueRouter的下载,安装和使用,路由的封装抽离,声明式导航的介绍和使用
文章目录 一.什么是单页面应用?二.什么是路由?生活中的路由和Vue中的路由 三.VueRouter(重点)0.引出1.介绍2.下载与使用(5个基本步骤2个核心步骤)2.1 五个基本步骤2.2 两个核心步骤 四.路由的封装抽离五.声明式导航1.导航链接特点一:能跳转特点二:能高亮 2.两个高亮类名2.1.区…...
数字ic后端设计从入门到精通2(含fusion compiler, tcl教学)
上篇回顾 上一篇文章需要讨论了net,pin的基础用法,让我们来看一下高级一点的用法 instance current_instance current_instance 是 Synopsys 工具(如 Fusion Compiler 或 Design Compiler)中用于在设计层次结构中导航的关键命令。它允许用…...
STM32---外部中断EXTI
目录 一、中断向量表 二、EXTI工作原理图 三、NVIC模块 四、GPIO设置为EXTI的结构 五、C语言示例代码 在STM32中,中断是一个非常重要的结构,他能让我们在执行主函数的时候,由硬件检测一些外部或内部产生的中断信号,跳转到中断…...
Itext进行PDF的编辑开发
这周写了一周的需求,是制作一个PDF生成功能,其中用到了Itext来制作PDF的视觉效果。其中一些功能不是很懂,仅作记录,若要学习请仔细甄别正确与否。 开始之前,我还是想说,这傻福需求怎么想出来的,…...
Hibernate的组件映射
在实际的开发中,使用的是非常多的,还有几种比较特殊的关系映射: 组件映射继承映射 先看一下组件映射: 组件映射中, 组件也是一个类, 但是这个类它不独立称为一个实体, 也就是说, 数据库中没有一个表格单独的和它对应, 具体情况呢, 看演示:...
C++ 操作符重载Operator
C可以重载大多数操作符,如算术运算符号,-号。 位操作符<<,>> 下标符号[]等都可以重载。 重载的意思,是让这些符号,按你定义的行为来执行代码,但是这种自定义,是有限制的,必须有一…...
Docker 镜像、容器和 Docker Compose的区别
前言:Docker 的镜像、容器和 Docker Compose 是容器化技术的核心组件,以下是对它们的详细解析及使用场景说明。 1、Docker 镜像(Image) 定义: 镜像是只读模板,包含运行应用程序所需的代码、…...
Linux深度探索:进程管理与系统架构
1.冯诺依曼体系结构 我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。 截至目前,我们所认识的计算机,都是由⼀个个的硬件组件组成。 输入设备:键盘,鼠标…...
一段式端到端自动驾驶:VAD:Vectorized Scene Representation for Efficient Autonomous Driving
论文地址:https://github.com/hustvl/VAD 代码地址:https://arxiv.org/pdf/2303.12077 1. 摘要 自动驾驶需要对周围环境进行全面理解,以实现可靠的轨迹规划。以往的方法依赖于密集的栅格化场景表示(如:占据图、语义…...
17.整体代码讲解
从入门AI到手写Transformer-17.整体代码讲解 17.整体代码讲解代码 整理自视频 老袁不说话 。 17.整体代码讲解 代码 import collectionsimport math import torch from torch import nn import os import time import numpy as np from matplotlib import pyplot as plt fro…...
把dll模块注入到游戏进程的方法_基于文件修改的注入方式
1、概述 本文主要是介绍两种基于文件修改的注入方式,一种是“DLL劫持”,另一种是“修改导入表”。这两种注入方式都是利用操作系统加载PE时的特点来实现的,我们在实现这两种注入方式时只需专注于注入dll的实现,而不用花费额外的精力去关注注入器的实现。要想深入了解这两种…...
4月21日星期一今日早报简报微语报早读
4月21日星期一,农历三月廿四,早报#微语早读。 1、女子伸腿阻止列车关门等待同行人员,被深圳铁路警方行政拘留; 2、北理工再通报:开除宫某党籍,免去行政职务,解除聘用关系; 3、澳门…...
Spark(20)spark和Hadoop的区别
Apache Spark 和 Apache Hadoop 都是广泛使用的开源大数据处理框架,但它们在设计理念、架构、性能和适用场景等方面存在显著区别。以下是它们的主要区别: ### **1. 架构设计** - **Hadoop**: - **HDFS(Hadoop Distributed File…...
Kubeflow 快速入门实战(二) - Pipelines / Katib / KServer
承接前文博客 Kubeflow 快速入门实战(一) Kubeflow 快速入门实战(一) - 简介 / Notebooks-CSDN博客文章浏览阅读441次,点赞19次,收藏6次。本文主要介绍了 Kubeflow 的主要功能和能力,适用场景,基本用法。以及Notebook,…...
【JavaEE初阶】多线程重点知识以及常考的面试题-多线程进阶(一)
本篇博客给大家带来的是多线程中常见的所策略和CAS知识点. 🐎文章专栏: JavaEE初阶 🚀若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,公主请阅🚀 要开心要快…...
ECA 注意力机制:让你的卷积神经网络更上一层楼
ECA 注意力机制:让你的卷积神经网络更上一层楼 在深度学习领域,注意力机制已经成为提升模型性能的重要手段。从自注意力(Self-Attention)到各种变体,研究人员不断探索更高效、更有效的注意方法。今天我们要介绍一种轻…...
基于定时器查询模式的LED闪烁(STC89C52单片机)
#include <reg52.h> sbit LED P0^0; sbit ADDR0 P1^0; sbit ADDR1 P1^1; sbit ADDR2 P1^2; sbit ADDR3 P1^3; sbit ENLED P1^4; void main() { unsigned char cnt 0; //定义一个计数变量,记录T0溢出次数 ENLED 0; //使能U3,选择…...
SAP系统生产跟踪报表入库数异常
生产跟踪报表入库数异常 交库21820,入库43588是不可能的 原因排查: 报表的入库数取值,是取移动类型321 (即系检验合格后过账到非限制使用)的数. 查凭证,101过账2次21807,321过账了2次21794,然后用102退1次21794.就是说这批物料重复交库了. 解决: 方案一:开发增强设…...
Kubernetes控制平面组件:调度器Scheduler(一)
云原生学习路线导航页(持续更新中) kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计(一)Kubernetes架构原则和对象设计(二)Kubernetes架构原则和对象设计(三)Kubernetes控…...
08-DevOps-向Harbor上传自定义镜像
harbor创建完成,往harbor镜像仓库中上传自定义的镜像,包括新建项目、docker配置镜像地址、镜像重命名、登录harbor、推送镜像这几个步骤,具体操作如下: harbor中新建项目 访问级别公开,代表任何人都可以拉取仓库中的镜…...
Vue v-for 循环DOM 指定dom个数展示一行
在Vue.js中,如果想根据v-for循环的结果来控制哪些元素应该在一行中展示,你可以通过计算属性或者方法来实现。这里使用CSS改变样式和js脚本两种方式做到这一点,根据你的具体需求选择适合的方法。 方法1:使用计算属性 如果你想要基…...
mysql控制单表数据存储及单实例表创建
1. 单表数据存储不要过大 主流建议 保守建议。100万以内保持最佳性能其他。不超过2000万 理论依据。 B树层级可能变多。从3增加到4。导致索引查询路径边长,增加IO开销 优化 加索引。对高频查询字段增加索引。避免全表扫描低频历史数据通过分区表或归档隔离。足够的…...
极验4滑块笔记:整理思路--填坑各种问题
最近在研究某验4逆向分析,以前没弄过这种,所以爬了很多坑,就是把分享给大家~ 1.这个gcaptcha4.js需要逆向,我的方法很笨就是将_ᕶᕴᕹᕶ()这个蝌蚪文打印处来,全局替换一下,然后Unicode这种代码࿰…...
LX3-初识是单片机
初识单片机 一 什么是单片机 单片机:单片微型计算机单片机的组成:CPU,RAM(内存),flash(硬盘),总线,时钟,外设…… 二 Coretex-M系列介绍 了解ARM公司与ST公司ARM内核系列: A 高性能应用,如手机,电脑…R 实时性强,如汽车电子,军工…M 超低功耗,如消费电子,家电,医疗器械 三…...
2025年渗透测试面试题总结-拷打题库10(题目+回答)
网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 2025年渗透测试面试题总结-拷打题库10 1. CSRF成因及防御措施 | 非Token防御 2. XSS Worm原理 3. Co…...
Linux系统下docker 安装 MySQL
踩坑解决: 1、docker安装mysql,不需要执行search 2、pull时,需要指定版本号 3、连接Navicat需要看阿里云端口号是否开启 在拉取镜像的时候,如果不使用代理服务器,docker search mysql不需要执行 本人在未使用代理服…...
配置 VS Code 使用 ESLint 格式化
1、在设置里面搜索Default Formatter,下拉框里选择eslint 2、并勾选Enables ESlint as a formatter 3、再在settings.json文件中添加配置代码,如下所示: 1) 、打开 VS Code 设置 快捷键:Ctrl ,(Mac: ⌘ ,…...
从代码实现理解Vision Permutator:WeightedPermuteMLP模型解析
从代码实现理解Vision Permutator:WeightedPermuteMLP模型解析 随着人工智能的快速发展,视觉识别任务变得越来越重要。最近提出的Vision Permutator架构为这一领域带来了新的思路,它通过可学习的排列操作重新定义了特征交互的方式。 今天我…...
Web开发:ABP框架10——使用数据库存储文件,完成文件的下载和上传
一、简要介绍 字节数组:字节数组是存储数据的字节序列,常用于二进制数据(如图片、音视频、文档等)的表示。 文件和字节的关系:文件是由字节构成,字节是文件内容的基本单位。 文件以字节形式存储在服务器数…...
SystemVerilog语法之内建数据类型
简介:SystemVerilog引进了一些新的数据类型,具有以下的优点:(1)双状态数据类型,更好的性能,更低的内存消耗;(2)队列、动态和关联数组,减少内存消耗…...
