【vue2第十五章】VueRouter 路由配置(VueRouter)与使用 和 router-link与router-view标签使用

单页面应用 与 多页面应用

单页面应用(Single-Page Application,SPA)和多页面应用(Multi-Page Application,MPA)是 Web 应用程序的两种不同架构方式。它们在页面加载和交互方式上有所区别。

单页面应用(SPA):指的是整个应用只有一个 HTML 页面,页面的内容和交互都通过 JavaScript 动态加载和更新。在 SPA 中,页面的切换和内容的变化通过前端路由来实现,通常使用框架(如 Vue、React、Angular)来构建。SPA 的优点是用户体验好,无需刷新整个页面即可根据用户交互动态地更新内容,提供流畅的用户界面。但对于首次加载较大的应用,会消耗较多的初始加载时间。

多页面应用(MPA):指的是应用由多个独立的 HTML 页面组成,每个页面对应一个独立的功能或视图。在 MPA 中,每个页面都是独立的,它们通过链接或表单提交等方式进行页面跳转。在每个页面中,服务器会返回一个新的 HTML 页面,包含所需的样式和脚本。MPA 的优点是每个页面都有独立的 URL,有利于 SEO(搜索引擎优化),也更适合传统的 Web 开发方式。但页面之间的切换会导致整个页面的刷新,用户体验稍差一些。

选择SPA还是MPA主要取决于应用的需求和目标。SPA适合构建交互复杂、用户体验要求高的应用,如社交媒体应用、在线编辑器等;而MPA适合构建内容丰富、独立页面较多的应用,如电子商务网站、新闻门户等。
在这里插入图片描述

常见的网站比如网易云音乐就是单页面应用,而京东,淘宝就是一个多页面应用。

在这里插入图片描述

VueRouter路由

像vue开发的就是一个典型的单页面程序。
Vue Router 是 Vue.js 官方提供的路由管理器。它能够帮助你在 Vue 单页面应用(SPA)中实现页面之间的导航和路由功能。它是一种映射关系,映射了页面组件与路径的关系。

在这里插入图片描述

如何配置VueRouter

  1. 下载vue-router因为它是一个单独的模块所以需要下载。
    vue2对应的vue-router版本是 vue-router3.x
    vue3对应的vue-router版本是 vue-router4.x

    使用npm下载:npm install vue-router@3.6.5 --save
    使用yarn下载:yarn add vue-router@3.6.5

  2. 在main.js中引入。

import VueRouter from 'vue-router'
  1. 安装注册。
Vue.use(VueRouter)
  1. 创建路由对象。
const router = new VueRouter();
  1. 将路由对象注入到Vue实列中,建立关联,键值对形式,键与值同名可简写。
new Vue({render: h => h(App),router
}).$mount('#app')

main.js完整代码:

import Vue from 'vue'
import App from './App.vue'
import VueRouter from 'vue-router'Vue.config.productionTip = false
Vue.use(VueRouter)const router = new VueRouter();new Vue({render: h => h(App),router
}).$mount('#app')

配置成功启动项目浏览器顶部地址栏会出现#号
在这里插入图片描述

如何使用VueRouter

在这里插入图片描述

首先肯定是要配置路由规则。
首先准备了三个简单的页面组件。
引入页面组件,然后将他添加到router的routes属性中,path是访问路径,component是对应的组件页面{path:"/fine",component:MyFine},页面组件的名称最好超过两个单词,否则会报错,因为是vue规定的,为了有更强大的语义性。name

import Vue from 'vue'
import App from './App.vue'
import MyFine from './views/MyFine.vue'
import MyFriend from './views/MyFriend.vue'
import MyIndex from './views/MyIndex.vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)Vue.config.productionTip = falseconst router = new VueRouter({
//配置路由规则 path是访问路径,component是对应的组件页面routes:[{path:"/fine",component:MyFine},{path:"/friend",component:MyFriend},{path:"/index",component:MyIndex},]
});
new Vue({render: h => h(App),router
}).$mount('#app')

路由的路径跳转,与容器 <router-view></router-view>

<template><div id="app"><div class="menu-box"><ul class="menu"><!-- 路由路径跳转只需要在a标签上写main.js配置规则的path路径 --><li><a href="#/index">首页</a></li><li><a href="#/fine">发现</a></li><li><a href="#/friend">朋友</a></li></ul></div><div ><!-- 这是组件页面的容器,切换菜单只会更新这里面的内容 --><router-view></router-view></div></div>
</template><script>export default {name: 'App',components: {}
}
</script><style>
*{margin: 0;padding: 0;
}
#app {font-family: Avenir, Helvetica, Arial, sans-serif;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-align: center;color: #2c3e50;
}
.menu-box{width: 100%;height: 50px;
}
.menu{height: 100%;text-align: center;line-height: 50px;
}
.menu>li{float: left;width: 33%;list-style: none;background: skyblue;
}</style>

效果点击上面的menu菜单下面的内容也会随之改变:
在这里插入图片描述

提取路由代码,封装路由模块

像上面这样配置路由会有一点问题,就是不易于维护,因为把所有的配置全部都写在main.js里面,那我们后面维护看见main.js文件里面的一堆代码,头都晕了,所以这里我们将它提取出来,再通过import导入到main,js。

  1. 首先建立路由模块文件
    在这里插入图片描述
  2. 将main.js里面配置路由的代码赋值到index.js。导入文件的路径需要修改,@:代表从src文件出发寻找文件。
import MyFine from '@/views/MyFine.vue'
import MyFriend from '@/views/MyFriend.vue'
import MyIndex from '@/views/MyIndex.vue'
import VueRouter from 'vue-router'
import Vue from 'vue'Vue.use(VueRouter)const router = new VueRouter({routes:[{path:"/fine",component:MyFine},{path:"/friend",component:MyFriend},{path:"/index",component:MyIndex},]});export default router;
  1. 再main.js里面导入路由模块直接使用。
import Vue from 'vue'
import App from './App.vue'
//导入路由模块
import router from './router/index.js'Vue.config.productionTip = falsenew Vue({render: h => h(App),//直接使用router
}).$mount('#app')

使用给menu菜单选中的高亮样式

  1. router-link是什么?
    vue-router提供的全局组件,用于替换 a 标签
  2. router-link怎么用?
<router-link to="/路径值"></router-link>

再使用 <router-link to="/index">首页</router-link>时to属性里面的路径就可以不用加#号了
必须传入to属性,指定路由路径值

  1. router-link好处?
    能跳转,能高亮(自带激活时的类名)router-link-activerouter-link-exact-active我们需要高亮效果可以直接再style样式中为这个类名添加高亮的样式了。

修改刚才的代码为:

<template><div id="app"><div class="menu-box"><ul class="menu"><!-- 路由路径跳转只需要在a标签上写main.js配置规则的path路径 --><router-link to="/index">首页</router-link><router-link to="/fine">发现</router-link><router-link to="/friend">朋友</router-link></ul></div><div ><!-- 这是组件页面的容器,切换菜单只会更新这里面的内容 --><router-view></router-view></div></div>
</template><script>export default {name: 'App',components: {}
}
</script><style>
*{margin: 0;padding: 0;
}
#app {font-family: Avenir, Helvetica, Arial, sans-serif;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-align: center;color: #2c3e50;
}
.menu-box{width: 100%;height: 50px;
}
.menu{height: 100%;text-align: center;line-height: 50px;
}
.menu>a{float: left;width: 33%;display: block;list-style: none;background: skyblue;
}
//为激活时的这个类名添加高亮属性样式
.menu>a.router-link-active{ background: rgb(12, 155, 211);
}
</style>

效果:
在这里插入图片描述

router-link-activerouter-link-exact-active的意义

在这里插入图片描述
这里可以看见我选中的标签上面时加了两个类的,这两个类的意义是什么呢?
router-link-active :模糊匹配
router-link-exact-active:精确匹配
模糊匹配就是地址栏上面有子目录,也可以匹配上。

而精确匹配就是地址栏和router-link的to属性路径必须时一模一样,才可以匹配上。
在这里插入图片描述

如现在时两个条件都满足,模糊和精确条件都满足,所以选中的menu里面类就是两个:
在这里插入图片描述
如现在就是不满足精确条件了,所以选中的menu里面类就是一个router-link-active
在这里插入图片描述

自定义高亮类名

在这里插入图片描述
在路由模块中修改:

import MyFine from '@/views/MyFine.vue'
import MyFriend from '@/views/MyFriend.vue'
import MyIndex from '@/views/MyIndex.vue'
import VueRouter from 'vue-router'
import Vue from 'vue'
Vue.use(VueRouter)
const router = new VueRouter({routes:[{path:"/fine",component:MyFine},{path:"/friend",component:MyFriend},{path:"/index",component:MyIndex},],//模糊匹配的类名linkActiveClass:"active",//精确匹配的类名linkExactActiveClass:"exact-active"});
export default router;

这样添加的就是自定义的类名了,如图:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ:hello结构

1.在Linux环境上面装入rabbitMQ doker-compose.yml version: "3.1" services:rabbitmq:image: daocloud.io/library/rabbitmq:managementrestart: alwayscontainer_name: rabbitmqports:- 6786:5672- 16786:15672volumes:- ./data:/var/lib/rabbitmq doker-compos…

【网络编程】TCP传输控制协议(Transmission Control Protocol)

(꒪ꇴ꒪ )&#xff0c;Hello我是祐言QAQ我的博客主页&#xff1a;C/C语言&#xff0c;数据结构&#xff0c;Linux基础&#xff0c;ARM开发板&#xff0c;网络编程等领域UP&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff0c;让我们成为一个强大的攻城狮&#xff0…

【回眸】牛客网刷刷刷!(八)——中断专题

目录 前言 1、在CortexM内核中&#xff0c;当系统响应一个中断时 2、用与非门和或非门可以实现其他基本门电路。进而实现任何逻辑电路 3、cpu interface提供了功能包含 4、以Cortex-M3内核为例&#xff0c;如果某个中断在得到响应之前&#xff0c;其请求信号以若干的脉冲的…

超越时间与人力的软件开发智慧:《人月神话》

目录 1、写在前面2、沟通&#xff01;沟通&#xff01;沟通&#xff01;3、“银弹论”4、“人月神话”不能成立的原因5、影响力6、图书推荐 1、写在前面 《人月神话》是由计算机科学家弗雷德里克布鲁克斯所著的一本经典著作&#xff0c;首次出版于1975年。这本书以一个个小故事…

SSL证书系列--又拍云Let’s Encrypt免费DV SSL证书使用教程

原文网址&#xff1a;SSL证书系列--又拍云Let’s Encrypt免费DV SSL证书使用教程_IT利刃出鞘的博客-CSDN博客 简介 本文介绍如何使用又拍云部署Let’s Encrypt免费DV SSL证书。 一、了解Let’s Encrypt 了解和关注SSL证书的朋友&#xff0c;似乎没有理由不知道 Let’s Encr…

苹果与芯片巨头Arm达成20年新合作协议,将继续采用芯片技术

9月6日消息&#xff0c;据外媒报道&#xff0c;芯片设计巨头Arm宣布在当地时间周二提交给美国证券交易委员会&#xff08;SEC&#xff09;的最新IPO文件中&#xff0c;透露与苹果达成了一项长达20年的新合作协议&#xff0c;加深了双方之间的合作关系。 报道称&#xff0c;虽然…

进入低功耗和唤醒

休眠模式 进入休眠模式 如果使用 WFI 指令进入睡眠模式&#xff0c;则嵌套向量中断控制器 (NVIC) 确认的任意外设中断都会 将器件从睡眠模式唤醒。 如果使用 WFE 指令进入睡眠模式&#xff0c;MCU 将在有事件发生时立即退出睡眠模式。唤醒事件可 通过以下方式产生&#xff…

jvs-智能bi(自助式数据分析)9.1更新内容

​jvs-智能bi更新功能 1.报表增加权限功能&#xff08;服务、模板、数据集、数据源可进行后台权限分配&#xff09; 每个报表可以独立设置权限&#xff0c;通过自定义分配&#xff0c;给不同的人员分配不同的权限。 2.报表新增执行模式 可选择首次报表加载数据为最新数据和历…

搜索二维矩阵 II

题目链接 搜索二维矩阵 II 题目描述 注意点 矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 解答思路 最初想到使用深度优先遍历剪枝实现&#xff0c;但是运行后超出时间限制了可以直接遍历整个矩阵查找&#xff0c;虽然不超时…

升级iOS 17出现白苹果、不断重启等系统问题怎么办?

iOS 17发布后了&#xff0c;很多果粉都迫不及待的将iphone/ipad升级到最新iOS17系统&#xff0c;体验新系统功能。 但部分果粉因硬件、软件的各种情况&#xff0c;导致升级系统后出现故障&#xff0c;比如白苹果、不断重启、卡在系统升级界面等等问题。 如果遇到了这些系统问题…

python 创建 Telnet 客户端

目录 前言 1. Telnet 客户端框架 2. Telnet 代码分解 2.1 基于 TK 创建会话窗口 2.1.1 创建 Text 文本控件 2.1.2 创建 Frame 容器 2.1.2.1 基于 Frame 容器创建主机地址输入框 2.1.2.1.1 主机地址输入框绑定焦点事件 2.1.2.2 创建 Telnet 连接按钮控件 2.1.2.3 创建…

小程序如何上传微信聊天记录的文件

wx.chooseMessageFile({count: 10,type: image,success (res) {// tempFilePath可以作为img标签的src属性显示图片const tempFilePaths res.tempFiles} })参数说明 回调函数说明

【区块链 | IPFS】浅谈 | IPFS数据存储原理

IPFS在数据存储方面采用的是分散式的文件存储,区别于HTTP协议的位置寻址,IPFS是基于内容寻址,当文件上传到IPFS节点存储时,节点会对文件进行Merkle DAG(默克尔有向无环图)的格式组织分块存储,在存储完毕后,文件将以Merkle DAG的根哈希数来表示该文件,用户可以从IPFS构…

TSUMU58CDT9-1显示器芯片方案

TSUMU58CDT9-1是用于LCD显示器的整体解决方案图形处理IC&#xff0c;面板分辨率高达WUXGA。它配置了高速集成三adc /PLL、集成DVI/HDMI接收器、高质量显示处理引擎、集成微控制器和支持LVDS面板接口格式的输出显示接口。TSUMU58CDT9-1支持一个灵活的可配置数字输入接口&#xf…

Ajax介绍、爬取案例实战 + MongoDB存储

Ajax介绍 Ajax&#xff08;Asynchronous JavaScript and XML&#xff09;是一种用于在Web应用程序中实现异步通信的技术。它允许在不刷新整个网页的情况下&#xff0c;通过在后台与服务器进行数据交换&#xff0c;实时更新网页的一部分。Ajax的主要特点包括&#xff1a; 异步通…

Python Flask Web开发三:数据表的字段增加和删除

前言 在实际的开发中&#xff0c;数据表中的字段的增加和删除是很正常的操作&#xff0c;在运营的不断提需求下&#xff0c;这个修改的频率是很高的&#xff0c;那么在flask中如何进行字段的增加和删除呢&#xff1f;下面我来给大家讲讲 一、创建迁移脚本 使用数据库迁移工具…

C++内存管理(2)new、delete详解

目录 new operator&#xff08;new操作&#xff09; new类对象时加不加括号的差别 new工作任务 delete工作任务 new和delete 堆区空间操作&#xff08;对比malloc和free&#xff09; new和delete操作基本类型的空间 new和delete操作基本类型的数组 new和delete操作类的…

Qt开发_调用OpenCV(3.4.7)设计完成人脸检测系统

一、前言 近年来,人脸识别技术得到了广泛的应用,它可以在各种场景中实现自动化的人脸检测和识别,例如安防监控、人脸解锁、人脸支付等。 该项目的目标是设计一个简单易用但功能强大的人脸检测系统,可以实时从摄像头采集视频,并对视频中的人脸进行准确的检测和框选。通过…

0012Java程序设计-springboot基于微信小程序的校园智慧帮系统的设计与实现

摘要目录相关技术2.1 MySQL数据库2.2 SpringBoot框架2.3 uniapp框架2.4 B/S架构 系统设计系统实现开发环境 摘要 随着移动互联网高速发展&#xff0c;手机、移动智能终端设备在生活中有着越来越重要的地位。在高校推崇以人为本的今天&#xff0c;也逐渐重视“移动互联网”技术…

​7.1 项目1 学生通讯录管理:文本文件增删改查(C++版本)(自顶向下设计+断点调试) (A)​

C自学精简教程 目录(必读) 作业目标&#xff1a; 这个作业中&#xff0c;你需要综合运用之前文章中的知识&#xff0c;来解决一个相对完整的应用程序。 作业描述&#xff1a; 1 在这个作业中你需要在文本文件中存储学生通讯录的信息&#xff0c;并在程序启动的时候加载这些…