Vue--》路由vue-router的使用讲解

news2024/11/25 0:31:03

目录

路由简述

vue-router

vue-router的安装配置与使用

路由重定向

嵌套路由

嵌套路由重定向

命名路由

动态路由


路由简述

路由(英文:router)就是对应关系。单页面应用程序(SPA)指的是一个web网站只有唯一一个HTML页面,所有组件的展示与切换都在这唯一的一个页面内完成。此时,不同组件之间的切换需要通过前端路由来实现。前端路由:通俗的概念是Hash地址与组件之间的对应关系。

路由的分类

一个路由就是一组映射关系(key-value)。key为路径,value可能是function或component

1)前端路由:value是component,用于展示页面的内容;当浏览器的路径改变时,对应的组件就会显示。

2)后端路由:value是function,用于处理客户端提交的数据;服务器接收到一个请求时,根据请求路径找到匹配的函数来处理请求,返回响应数据。

前端路由的工作方式

1)用户点击了页面上的路由链接

2)URL地址栏中的Hash值发生了变化

3)前端路由监听到了Hash地址的变化

4)前端路由把当前Hash地址对应的组件渲染到浏览器中

vue-router

vue-router是vue的一个插件库,专门用来实现SPA应用。vue-router是vue.js官方给出的路由解决方案。它只能结合vue项目进行使用,能够轻松的管理SPA项目中组件的切换,其官方文档地址:vue-router 。

vue-router的安装配置与使用

1)安装 vue-router 包:(注意:如果使用vue2项目需指定版本,默认下载会下载最新版本,最新版本只兼容vue3项目,这点切记。我这里指定版本匹配vue2项目,如果是vue3项目的话,不指定版本默认下载即可。)

npm install vue-router@3.5.2 -S

执行命令后可能会出现如下错误:

报错提示

Fix the upstream dependency conflict, or retry:修复上游依赖关系冲突,或重试

this command with --force, or --legacy-peer-deps:此命令带有--force或--legacy peer deps
to accept an incorrect (and potentially broken) dependency resolution. :

以接受不正确(并且可能被破坏)的依赖性解析。

主要原因

npm7 以上的版本,新增了一个对等依赖的特性,在以前的版本上,只会显示警告,但是还是可以安装成功,然而在新的版本是,npm 安装依赖则会直接报错,无法安装,这也是为了应用更加健壮而加的新的特性吧!

解决方法

如果要保持旧的安装模块方法,可以尝试 npm install 加--legacy peer deps 参数,这个参数保持跟旧版本一样的安装模块,忽略对等依赖。或者加入 --force 绕过冲突。

2)创建路由模块:(在src源代码目录下,新建router/index.js路由模块,并初始化如下代码)

// src/router/index.js 就是当前项目的路由模块
// 1.导入Vue和VueRouter的包
import Vue from 'vue'
import VueRouter from 'vue-router'

// 2.调用Vue.use()函数,把VueRouter安装为Vue的插件
Vue.use(VueRouter)

// 3.创建路由的实例对象
const router = new VueRouter()

// 4.向外共享路由的实例对象
export default router

3)导入并挂载路由模块

我们在 main.js 文件下导入路由模块,目的是为了拿到路由的实例对象。

4)声明路由链接和占位符

当安装和配置了 vue-router 后,就可以使用 router-link 来替代普通的a链接了,使用router-link后,就不用再书写a链接必须写的 # 了。

<!-- <a href="#/home">首页</a> -->
<router-link to="/home">首页 </router-link>
<router-link to="/movie">电影 </router-link>
<router-link to="/about">关于</router-link>

只要在项目中安装和配置了 vue-router,就可以使用 router-view 这个组件了,作用:占位符。

<router-view></router-view>

声明完路由链接和占位符之后,我们就需要在 router 文件夹下声明我们的路由规则以及要导入我们要展示到页面的组件。

// 导入Vue和VueRouter的包
import Vue from 'vue'
import VueRouter from 'vue-router'

// 导入需要的组件
import Home from '@/components/Home.vue'
import Movie from '@/components/Movie.vue'
import About from '@/components/About.vue'

// 调用Vue.use()函数,把VueRouter安装为Vue的插件
Vue.use(VueRouter)

// 创建路由的实例对象
const router = new VueRouter({
  // routes是一个数组,作用:定义 “hash地址” 和 “组件” 之间的对应关系。
  routes: [
    // 路由规则
    { path: '/home', component: Home },
    { path: '/movie', component: Movie },
    { path: '/about', component: About }
  ]
})

// 向外共享路由的实例对象
export default router

补充

浏览器的历史纪录有两种写入方式:分别是push和replace,push是追加历史记录,replace是替换当前记录,路由跳转的时候默认为push。

replace属性的作用是:控制路由跳转时操作浏览器历史记录的模式

开启replace模式:<router-link replace ......>内容</router-link>

路由重定向

路由重定向:用户在访问地址A的时候,强制用户跳转到地址C,从而展示特定的组件页面,通过路由规则的 redirect 属性,指定一个新的路由地址,可以很方便地设置路由的重定向:

嵌套路由

通过路由实现组件的嵌套展示,叫做嵌套路由,如下图所示:

通过children属性声明子路由规则,即在 src/router/index.js路由模块中,导入需要的组件,并使用children属性声明子路由规则:

// 导入需要的组件
import Tab1 from '@/components/tabs/Tab1.vue'
import Tab2 from '@/components/tabs/Tab2.vue'

// 创建路由的实例对象
const router = new VueRouter({
  routes: [
    // 路由规则
    {
      path: '/about',
      component: About,
      children: [ // 通过children属性,嵌套声明子级路由规则
        // 注意:子路由规则的路径 path 一般前面就不需要加 "/" 了。
        { path: 'tab1', component: Tab1 }, // 访问 /about/tab1 时,展示 Tab1 组件
        { path: 'tab2', component: Tab2 } // 访问 /about/tab2 时,展示 Tab2 组件
      ]
    }
  ]
})

嵌套路由重定向

当为嵌套的子路由规定页面跳转的地址时,如下操作即可:

当然我们也可以通过设置默认子路由实现:如果 children 数组中,某个路由规则的path值为空字符串,则这条路由规则叫做:“默认子路由“。 也能达到和重定向相同的效果,看具体情况设置。

命名路由

命名路由的作用是简化要书写的完整路径,为什么要简化呢?举个例子比如你在开发过程中有一个路径十分的长,如果你不简化路径的话,写的路径代码太长显得十分臃肿,说白了就不好看,如下

这里我们就需要借助命名路由来简化我们书写的路径了,即在路由规则上加一个name属性,如下

如果想为子路由链接添加命名路由也可以通过上面的方式进行添加。

如果想配合传递参数的话,可以通过以下的方式。

动态路由

动态路由是指:把Hash地址中可变的部分定义为参数项,从而提高路由规则的复用性。在 vue-router 中使用英文的冒号(:)来定义路由的参数项。代码如下:

// 路由的动态参数以 : 进行声明,冒号后面的是动态参数的名称
{ path: '/movie/:id', component: Movie }

// 将下面三个路由规则,合并成一个,提高了路由规则的复用性
{ path: '/movie/1', component: Movie }
{ path: '/movie/2', component: Movie }
{ path: '/movie/3', component: Movie }

那么我们如何判断我们获取的是哪个id页面的路径呢?我们可以通过 this.$route 为路由的 “参数对象” 来知道,如下:

当然拿到id不仅可以通过上面的方式,使用props属性也可以,如下:

props值为布尔值,布尔值为true,则把路由收到的所有params参数通过props传递给其组件

其他方式

props值为对象,该对象中的所以key-value的组合最终都会通过props传给其组件。

props:{a:100}

props值为函数,该函数返回的对象中每一组key-value都会通过props传递给其组件

props(route){
    return {
        id:route.query.id,
        title:route.query.title
    }
}

注意

1)在上文介绍的hash地址中,/ 后面的参数项,叫做路径参数,需通过 this.$route.params来访问路径参数。

2)在hash地址中,?后面的参数,叫做查询参数,需通过 this.$route.query 来访问查询参数

注意:fullPath包含完整的路径参数和查询参数,而path路径值包含路径参数。

3)路由组件通常存放在pages文件夹下,一般组件通常存放在components文件夹

4)通过切换按钮,“隐藏”了路由组件,默认是被销毁的,需要的时候再去挂载。

5)每个组件都有自己的 $route 属性,里面存储着自己的路由信息。

6)整个应用只有一个router,可以通过组件的 $router 属性获取到。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/90750.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

故障分析 | MySQL死锁案例分析

作者&#xff1a;杨奇龙 网名“北在南方”&#xff0c;资深 DBA&#xff0c;主要负责数据库架构设计和运维平台开发工作&#xff0c;擅长数据库性能调优、故障诊断。 本文来源&#xff1a;原创投稿 *爱可生开源社区出品&#xff0c;原创内容未经授权不得随意使用&#xff0c;转…

[附源码]Python计算机毕业设计高校教材网上征订系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

密码改造技术路径大比拼--“免”改造太理想,“重”改造太复杂,“易”改造是王道

随着《密码法》的颁布施行&#xff0c;密码产业进入爆发式增长期。市场用户侧、供给侧、监管侧对于“密评密改”的标准路径和部署方式共识度低&#xff0c;有唱专业的&#xff0c;有唱商业的&#xff0c;有唱便捷的&#xff0c;有唱可持续发展的&#xff0c;有唱单品的&#xf…

ANSYS Mechanical 2020 R1 版本新特性-CABLE 280单元分析索结构

导读&#xff1a;3D 缆索单元&#xff0c;可用的产品&#xff1a;Pro | Premium | Enterprise | PrepPost | Solver | AS add-on 一、CABLE 280 单元概述 CABLE280适用于分析中等至极细的缆索结构(如海底电缆)。该单元是三维三节点二次线单元。每个节点有x , y , z三个平动自…

【Anime.js】——JavaScript动画库:Anime.js

官方文档 官网定义&#xff1a; anime.js 是一个简便的JS动画库&#xff0c;用法简单而且适用范围广&#xff0c;涵盖CSS&#xff0c;DOM&#xff0c;SVG还有JS的对象&#xff0c;各种带数值属性的东西都可以动起来。 一、搭建开发环境 1、新建一个文件夹 &#xff0c;用vs c…

CpG ODN丨艾美捷ODN 1982 (synthetic)参数说明

艾美捷CpG ODN系列——ODN 1982 (synthetic)&#xff1a;具有硫代磷酸酯骨架的GpC寡脱氧核苷酸。 艾美捷CpG ODN丨ODN 1982 (synthetic)化学性质&#xff1a; 序列&#xff1a;5-tccatgagcttcctgagct-3&#xff08;小写字母表示硫代磷酸酯键&#xff09;。 MW&#xff1a;638…

Java-1214

Spring5总体学习内容 Spring基本概念IOC容器AopJdbcTemplate事务管理Spring5新特性 框架概述 Spring是轻量级的开源的JavaEE框架Spring可以解决企业应用开发的复杂性Spring有两个核心部分&#xff1a;IOC、Aop IOC&#xff1a;控制反转&#xff0c;把创建对象的过程交给Spri…

【ant-design】生态介绍和表单设计器 汇总

▒ 目录 ▒&#x1f6eb; 导读需求开发环境1️⃣ ant-design生态ant-designant-design-vueant-design-pro2️⃣ 表单设计器form-render - 阿里团队开源表单设计器&#xff0c;自家 Antd UI 框架友好form-create - 支持Vue3 及 ElementPlusUI、AntDesign、iview 框架Form Genera…

如何建立好客户信任关系?

2022年9月8日&#xff0c; 一个秋高气爽阳光明媚的日子。 正当我优雅的端起coffee&#xff0c; 专注投入早A晚C的重要一环时&#xff0c; 光头老邱按下一沓资料&#xff0c; 一并丢下经典语录&#xff1a; 这个客户对我们很重要&#xff01; emmm...... 重要的客户托付给…

Centos实现软路由

因公司需求,需要一台Centos主机,既需要做服务器,又要做路由器,要求能够对外提供有线和WIFI,还要求在学校复杂的局域网环境中,能够通过IP直接访问。带着需求去华强北找符合这样设备,华强北给的方案是爱快软路由+centos虚拟机,满足了服务器和路由器功能,但是没法使用学校…

理解频域、时域、FFT和加窗 加深对信号的认识

学习信号时域和频域、快速傅立叶变换(FFT)、加窗&#xff0c;以及如何通过这些操作来加深对信号的认识。 理解时域、频域、FFT傅立叶变换有助于理解常见的信号&#xff0c;以及如何辨别信号中的错误。尽管傅立叶变换是一个复杂的数学函数&#xff0c;但是通过一个测量信号来理…

[附源码]Nodejs计算机毕业设计基于的二手车商城Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…

java计算机毕业设计springboot+vue小区防疫健康信息管理及出入登记平台

项目介绍 通篇文章的撰写基础是实际的应用需要,然后在架构系统之前全面复习大学所修习的相关知识以及网络提供的技术应用教程,以小区防疫健康信息管理及出入登记平台的实际应用需要出发,架构系统来改善现小区防疫健康信息管理及出入登记平台工作流程繁琐等问题。不仅如此以操作…

浅析即时通讯音视频开发多人实时音视频聊天架构

移动互联网发展迅猛&#xff0c;目前实时音视频技术已被广泛地应用在了实时在线教育、智能家居、在线直播、安防监控等领域。这之中&#xff0c;诸如多人视频会议、在线实时视频教育等场景&#xff0c;跟传统的一对一实时音视频聊天&#xff0c;在技术架构的实现上有很大不同。…

Java+mysql基于JSP的家教兼职网站

随着家教兼职网站需求和在线家教兼职网站渗透率的提升,中国家教兼职网站在线市场将释放巨大潜力,家教兼职网站系统的建设和发展成为业界广泛关注的重点,本文将对此进行分析,以期为我国家教兼职网站电子商务的发展提供参考。目前对于国内外知名兼职平台,各媒体都已经宣传的比较到…

多肽偶联壳聚糖川芎嗪纳米粒pEGF-CS-TMP-NPs

多肽偶联壳聚糖川芎嗪纳米粒pEGF-CS-TMP-NPs 中文名称&#xff1a;多肽偶联壳聚糖川芎嗪纳米粒 英文名称&#xff1a;pEGF-CS-TMP-NPs 纯度&#xff1a;95% 存储条件&#xff1a;-20C&#xff0c;避光&#xff0c;避湿 外观:固体或粘性液体 包装&#xff1a;瓶装/袋装 …

kubevirt

Kubevirt 是Redhat开源的以容器方式运行虚拟机的项目&#xff0c;以k8s add-on方式&#xff0c;利用k8s CRD为增加资源类型VirtualMachineInstance&#xff08;VMI),使用容器的image registry去创建虚拟机并提供VM生命周期管理。kubevirt提供vm-import-operator可以支持从vmwar…

iNavFlight之RC遥控MSP协议

iNavFlight之RC遥控MSP协议1. RC摇杆MSP协议2. 地面站配置 & MSP遥控器2.1 iNav地面站-配置2.2 iNav地面站-MSP遥控器3. RC摇杆总体逻辑框架4. RC摇杆代码设计框架5. MSP摇杆代码设计5.1 rxMspInit5.2 rxMspFrameStatus5.3 rxMspReadRawRC5.4 rxMspFrameReceive6. 整体Rx业…

中医药信息网站

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 网站前台&#xff1a;关于我们.、联系我们.、宣传资料、中药信息、方剂信息、名医信息 管理员功能&#xff1a; 1、管理…

科技向善:用OpenVINO减少食物浪费

作者&#xff1a;Anisha Udayakumar 翻译&#xff1a;张晶 项目背景 您是否知道每年大约有2300亿美元的食物被浪费&#xff0c;其中高达五分之一属于可食用农产品&#xff1f;我们都在自己的家中经历过某种类型的食物浪费&#xff0c;但最大量的浪费发生在杂货店的新鲜食品和…