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

Vue中使用路由

目录

  • 单页应用程序:SPA - Single Page Application
    • 路由
  • VueRouter
    • VueRouter使用步骤
    • 组件存放目录问题
  • 路由模块封装
  • 声明式导航 - 导航连接
    • 两个类名
    • 自定义匹配类名
  • 声明式导航 - 跳转传参
  • Vue路由 - 重定向
    • Vue路由 - 404
    • Vue路由 - 模式设置
  • 编程式导航 - 基本跳转
  • 编程式导航 - 路由传参
  • 组件缓存 keep-alive
    • 返回上一个组件


单页应用程序:SPA - Single Page Application

  • 单页面应用(SPA):所有功能都在一个html页面上实现。
开发分类实现方式页面性能开发效率用户体验学习成本首屏加载SEO
单页一个html页面按需更新,性能高非常好
多页多个html页面整页更新,性能低中等一般中等

应用场景:

  • 单页面应用:系统类网站 / 内部网站 / 文档类网站 / 移动端站点
  • 多页面应用:公司官网 / 电商类网站

单页面应用程序,之所以开发效率高,性能高,用户体验好,最大的原因就是:页面按需更新

要按需更新,首先要明确:访问路径和组件的对应关系。

访问路径和组件的对应关系通过路由确定。

路由

路由就是一种映射关系

生活中的路由:设备和ip的映射关系。

Vue中的路由:路径和组件的映射关系。

VueRouter

作用:修改地址栏路径时,切换显示匹配的组件。

说明:Vue官方的一个路由插件,是一个第三方包。

官网:http://v3.router.vuejs.org/zh/

VueRouter使用步骤

五个基础步骤(固定):

  1. 下载:下载VueRouter模块到当前工程,版本3.6.5

    yarn add vue-router@3.6.5

    • Vue2 VueRouter3.x Vue3.x
    • Vue3 VueRouter4.x Vue4.x
  2. 引入:

    import VueRouter from 'vue-router'

  3. 安装注册:

    Vue.use(VueRouter)

  4. 创建路由对象:

    const router = new VueRouter()

  5. 注入,将路由对象注入到new Vue实例中,建立关联:

    new Vue({render: h => h(App),router: router 
    }).$mount('#app')
    

2个核心步骤:

  1. 创建需要的组件(views目录),配置路由规则:

    import Find from './views/Find.vue'
    import My from './views/My.vue'
    import Friend from './views/Friend.vue'const router = new VueRouter({routes: [{ path: '/find', component: Find },{ path: '/my', component: My },{ path: '/friend', component: Friend },]
    })
    
  2. 配置导航,配置路由出口(路径匹配的组件显示的位置):

    <div class="footer_wrap"><a href="#/find">发现音乐</a><a href="#/my">我的音乐</a><a href="#/friend">朋友</a>
    </div>
    <div class="top"><router-view></router-view>
    </div>
    

组件存放目录问题

.vue文件分两类——页面组件和复用组件,但本质无区别,分类是为了更容易维护。

  • src/views文件夹
    • 页面组件 - 页面展示 - 配合路由用
  • src/components文件夹
    • 复用组件 - 展示数据 - 常用于复用

路由模块封装

目标:将路由模块抽离出来。

好处:拆分模块,利于维护。

声明式导航 - 导航连接

需求:实现导航高亮效果。

vue-router提供了一个全局组件router-link(取代a标签)

  • 能跳转,配置to属性指定路径(必须)。本质还是a标签,to无需 #
  • 能高亮,默认就会提供高亮类名,可以直接设置高亮样式

两个类名

router-link自动给当前导航添加了两个高亮类名。

区别:

  • router-link-active 模糊匹配(用的多)
    • to="/my"可以匹配 /my /my/a /my/b
  • router-link-exact-active 精确匹配
    • to="/my"只可以匹配 /my

自定义匹配类名

router-link的两个高亮类名太长,我们可以自定义类名:

const router = new VueRouter({routes: [...],linkActiveclass: "类名1", // 配置模糊匹配的类名linkExactActiveClass: "类名2" // 配置精确匹配的类名
})

声明式导航 - 跳转传参

目标:在跳转路由时,进行传值。

  1. 查询参数传参(适合串多个参数)

    • 语法格式:to="/path?参数名=值"

    • 对应页面组件接收传递过来的值:$route.query.参数名

  2. 动态路由传参(穿单个参数方便)

    • 配置动态路由

      const router = new VueRouter({routes: {...,{path: '/search/:words', // 配置参数名component: Search}}
      })
      
    • 配置导航链接:to="/path/参数值"

    • 对应页面组件接收传递过来的值:$route.params.参数名

问题:配了路由path: "/search/:words"为什么按下面步骤操作,会匹配到组件显示空白?

原因:/search/:words表示,必须要传参数。如果不传参数,也希望匹配,可以加个可选符 “?”,例如:/search/:words?

Vue路由 - 重定向

问题:网页打开,url默认是 / 路径,为匹配到组件时,会出现空白。

说明:重定向 —— 匹配path后,强制跳转path路径

语法:{ path: 匹配路径, redirect: 重定向到的路径 }

const router = new VueRouter({routes: [{ path: '/', redirect: '/home' },{ path: '/home', component: Home },{ path: '/search/:words', component: Search },]
})

Vue路由 - 404

作用:当路径找不到匹配时,给个提示页面

位置:配在路由最后

语法:path: "*"表示匹配任意路径 - 前面不匹配就命中最后这个。

Vue路由 - 模式设置

问题:路由的路径看起来不自然,有#,能否切成真正路径形式?

  • hash路由(默认) 例如:http://localhost:8080/#/home

  • history路由(常用) 例如:http://localhost:8080/home (以后上线需要服务端支持)

    const router = new VueRouter({routes,mode: "history"
    })
    

编程式导航 - 基本跳转

编程式导航:用JavaScript代码实现点击按钮跳转。

两种语法:

  1. path路径跳转(简易方便)

    this.$router.push('路由路径')
    this.$router.push({path: '路由路径'
    })
    
  2. name命名路由跳转(适合path路径长的场景)

    this.$router.push({name: '路由名'
    })
    
    { name: '路由名', path: '/path/xxx', component: xxx }
    

编程式导航 - 路由传参

两种传参方式:查询参数+动态路由传参

两种跳转方式,对于两种传参方式都支持:

  1. path路径跳转传参

    • query传参

      this.$router.push('/路径?参数名1=参数值1&参数名2=参数值2')
      this.$router.push({path: '/路径',query: {参数名1: '参数值1',参数名2: '参数值2',}
      })
      
    • 动态路由传参(需要配置动态路由)

    this.$router.push('/路径/参数值')
    this.$router.push({path: '/路径/参数值',query: {参数名: 参数值,}
    })
    
  2. name命名路由跳转传参

    • query传参

      this.$router.push({name: '路由名字',params: {参数名: 参数值,}
      })
      
    • 动态路由传参

      this.$router.push({name: 'search',params: {words: this.inpValue}
      })
      

组件缓存 keep-alive

问题:从面经页点到详情页,又点返回,数据重新加载了,但我希望能回到原来的位置。

原因:路由加载,组件被销毁了,返回回来组件又被重建了,所以数据重新被加载。

keep-alive是什么:

keep-alive是Vue的内置组件,当它包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。

keep-alive是一个抽象组件:它自身不会渲染成一个DOM元素,也不会出现在父组件链中。

keep-alive的优点:

在组件切换过程中把切换出去的组件保留在内存中,放置重复渲染DOM,减少加载时间及性能消耗。

<template><div class="h5-wrapper"><keep-alive><router-view></router-view></keep-alive></div>
</template>

问题:缓存了所有被切换的组件

keep-alive的三个属性:

  • include:组件名数组,只有匹配的组件会被缓存
  • exclude:组件名数组,任何匹配的组件都不会被缓存
  • max:最多可以缓存多少组件实例

keep-alive的使用会触发两个生命周期函数(了解)

  • activated当组件被激活(使用)的时候触发 —— 进入页面触发
  • deactivated当组件不被使用的时候触发 —— 离开页面触发

返回上一个组件

语法:$router.back()

作用:返回上一个组件。

相关文章:

Vue中使用路由

目录 单页应用程序&#xff1a;SPA - Single Page Application路由 VueRouterVueRouter使用步骤组件存放目录问题 路由模块封装声明式导航 - 导航连接两个类名自定义匹配类名 声明式导航 - 跳转传参Vue路由 - 重定向Vue路由 - 404Vue路由 - 模式设置 编程式导航 - 基本跳转编程…...

【Linux】多线程安全之道:互斥、加锁技术与底层原理

目录 1.线程的互斥 1.1.进程线程间的互斥相关背景概念 1.2.互斥量mutex的基本概念 所以多线程之间为什么要有互斥&#xff1f; 为什么抢票会抢到负数&#xff0c;无法获得正确结果&#xff1f; 为什么--操作不是原子性的呢&#xff1f; 解决方式&#xff1a; 2.三种加锁…...

收藏多年的四款音频剪辑工具你pick哪一个?

在这个时代&#xff0c;音频剪辑已经成为音乐制作、播客、自媒体等领域的必备技能。而随着网络技术的飞速发展&#xff0c;我们不再需要安装庞大的软件&#xff0c;只需一个浏览器&#xff0c;就能轻松完成音频剪辑工作。今天&#xff0c;就让我为大家推荐几款优秀的在线音频剪…...

使用Redis进行在线人数统计时,有哪些性能优化技巧?

使用Redis进行在线人数统计时&#xff0c;性能优化是关键&#xff0c;以下是一些性能优化技巧&#xff1a; 选择合适的数据结构&#xff1a; 对于在线人数统计&#xff0c;可以选择使用Set数据结构&#xff0c;因为它具有自动去重和高效的集合操作特性&#xff0c;非常适合用于…...

前端模块循环依赖问题

模块循环依赖问题 在项目比较小的时候可能不怎么会遇到这个问题&#xff0c;但项目一旦有一定的体量后就可能会遇到了。 我之前做项目时就遇到这个问题&#xff0c;也是总结一篇文章。 比如这种类型的报错 commonjs存在的问题 先讲一下commonjs存在的问题。 CommonJS模块采…...

Springboot指定扫描路径

方式一&#xff1a;通过在启动类的SpringbootApplication中指定包扫描或类扫描 指定需要扫描的包 scanBasePackages{"待扫描包1","待扫描包2", . . . ," "} 指定需要扫描的类 scanBasePackageClasses{类1.class,类2.class,...} 方式二&#xff…...

【Flutter】Dart:环境搭建

Flutter 是一个基于 Dart 的跨平台开发框架&#xff0c;可以帮助我们快速构建移动应用程序。在开始 Flutter 开发之前&#xff0c;我们需要先搭建 Dart 的开发环境&#xff0c;并配置合适的编辑器&#xff0c;比如 VSCode。本教程将引导你一步步完成 Dart 和 Flutter 的环境搭建…...

OpenCV高级图形用户界面(10)创建一个新的窗口函数namedWindow()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 创建一个窗口。 函数 namedWindow 创建一个可以作为图像和跟踪条占位符的窗口。创建的窗口通过它们的名字来引用。 如果已经存在同名的窗口&am…...

水题四道。

我的 水题四道--题目目录 问题 A: 依次输出第k小整数 代码1 问题 B: 第k小整数(knumber) 代码2 树的统计 代码3 枪声问题 代码4 问题 A: 依次输出第k小整数 现有n个正整数&#xff0c;n≤10000&#xff0c;要求出这n个正整数中的第1小的整数&#xff0c;第2小的整数&#xf…...

upload-labs靶场Pass-05

upload-labs靶场Pass-05 大小写绕过 $deny_ext array(“.php”,“.php5”,“.php4”,“.php3”,“.php2”,“.html”,“.htm”,“.phtml”,“.pht”,“.pHp”,“.pHp5”,“.pHp4”,“.pHp3”,“.pHp2”,“.Html”,“.Htm”,“.pHtml”,“.jsp”,“.jspa”,“.jspx”,“.jsw”…...

【AIGC】解锁高效GPTs:ChatGPT-Builder中系统提示词Prompt的设计与应用

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;系统提示词系统提示词的作用与重要性系统提示词在构建GPTs中的作用结论 &#x1f4af;ChatGPT-Builder系统提示词的详细解读OpenAI为Builder编写的系统提示词系统提示词对…...

【JavaEE初阶】深入理解网络编程—使用UDP协议API实现回显服务器

前言 &#x1f31f;&#x1f31f;本期讲解关于TCP/UDP协议的原理理解~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1f386;那么废话不…...

C语言复习第3章 函数

目录 一、函数介绍1.1 函数是什么1.2 C语言中函数的分类1.3 函数原型1.4 高内聚 低耦合1.5 C语言main函数的位置 二、函数的参数2.1 实参和形参2.2 函数的参数(实参)可以是表达式2.3 传值与传址(swap函数)2.4 明确形参是实参的临时拷贝2.5 void(如果不写函数返回值 默认是int)2…...

Golang | Leetcode Golang题解之第491题非递减子序列

题目&#xff1a; 题解&#xff1a; var (temp []intans [][]int )func findSubsequences(nums []int) [][]int {ans [][]int{}dfs(0, math.MinInt32, nums)return ans }func dfs(cur, last int, nums []int) {if cur len(nums) {if len(temp) > 2 {t : make([]int, len(…...

conan安装方法简介

因为conan是使用python开发的&#xff0c;所以使用conan需要先安装python环境&#xff0c;这里就不展开python的安装方法了。 conan安装有多种方法&#xff0c;但是比较推荐也是比较简单的一种方法是使用python的pip包管理器安装&#xff0c;相关方法如下&#xff08;Windows和…...

Java面试指南:Java基础介绍

这是《Java面试指南》系列的第1篇&#xff0c;本篇主要是介绍Java的一些基础内容&#xff1a; 1、Java语言的起源 2、Java EE、Java SE、Java ME介绍 3、Java语言的特点 4、Java和C的区别和联系&#xff1f; 5、面向对象和面向过程的比较 6、Java面向对象的三大特性&#xff1a…...

【mod分享】波斯王子遗忘之沙高清重置,纹理,字体,贴图全部重置,特效增强,支持光追

各位好&#xff0c;今天小编给大家带来一款新的高清重置MOD&#xff0c;本次高清重置的游戏叫《波斯王子&#xff1a;遗忘之沙》。 《波斯王子&#xff1a;遗忘之沙》是由育碧&#xff08;Ubisoft&#xff09;开发并发行的一款动作类游戏&#xff0c;于2010年5月18日发行。游戏…...

【计网笔记】物理层

设备 中继器&#xff1a;延长信号传播长度集线器&#xff1a;RJ45接口&#xff0c;无碰撞检测 接口特性 不属于物理层接口规范定义范畴的是&#xff08;C&#xff09; A. 接口形状 B. 引脚功能 C. 物理地址 D. 信号电平 传输媒体 导引型媒体 双绞线 减少对相邻导线的电磁…...

《计算机视觉》—— 基于 dlib 库的方法将两张人脸图片进行换脸

声明&#xff1a;此篇文章所用的明星照片只为用于演示代码的效果&#xff0c;无诋毁她人肖像之意 一、案例实现的思想 此案例的核心是基于人脸68个关键点检测模型来实现的&#xff0c;人脸68个关键带点检测后的效果如下&#xff1a; 通过对上图中红色区域的转换&#xff0c;…...

查找与排序-交换排序

交换排序是基于“比较”和“交换”两种操作来实现的排序方法 。 由于选择“比较”的基准元素不同&#xff0c;可将交换排序分为以下两种&#xff1a; 冒泡排序快速排序 一、冒泡排序 1.冒泡排序基本思想 因为其实现与气泡从水中往上冒的过程类似而得名。 每一趟的…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器

一、原理介绍 传统滑模观测器采用如下结构&#xff1a; 传统SMO中LPF会带来相位延迟和幅值衰减&#xff0c;并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF)&#xff0c;可以去除高次谐波&#xff0c;并且不用相位补偿就可以获得一个误差较小的转子位…...