Vue2-集成路由Vue Router介绍与使用
文章目录
- 路由(Vue2)
- 1. SPA 与前端路由
- 2. vue-router基本使用
- 创建路由组件
- 声明路由链接和占位标签
- 创建路由模块
- 挂载路由模块
- 3. vue-router进阶
- 路由重定向
- 嵌套路由
- 动态路由
- 编程式导航
- 导航守卫
- 本篇小结
更多相关内容可查看
路由(Vue2)
1. SPA 与前端路由
路由是根据不同的url地址来显示不同的页面或内容的功能,这个概念很早是由后端提出的,既浏览器向
不同的地址发送请求,后端返回相应的内容。
SPA 指的是一个 web 网站只有唯一的一个 HTML 页面,所有组件的展示与切换都在这唯一的一个页面
内完成。此时,不同组件之间的切换需要通过前端路由来实现。
前端路由通常是通过监听URL hash属性值的变化,切换页面,hash 属性是一个 可读可写的字符串 ,该字
符串是 URL 的锚部分(从 # 号开始的部分)。
前端路由的工作方式
- 前端路由,指的是 Hash 地址与组件之间的对应关系。
- 用户点击了页面上的路由链接
- 导致了 URL 地址栏中的 Hash 值发生了变化
- 前端路由监听了到 Hash 地址的变化
- 前端路由把当前 Hash 地址对应的组件渲染到浏览器中
2. vue-router基本使用
vue-router 是vue.js 官方给出的路由解决方案。它只能结合 vue 项目进行使用,能够轻松的管理 SPA 项目中组件的切换。
vue-router 目前有 3.x 的版本和 4.x 的版本。其中:
- vue-router 3.x 只能结合 vue2 进行使用
- vue-router 4.x 只能结合 vue3 进行使用
官方文档:https://router.vuejs.org/zh/installation.html vue-router
vue-router的基本使用步骤:
-
在项目中安装 vue-router
-
定义路由组件
-
声明路由链接和占位符
-
创建路由模块
-
导入并挂载路由模块
vue-router安装
npm install vue-router@
创建路由组件
在项目中定义 Discover.vue、 Friends.vue、 My.vue 三个组件,将来要使用 vue-router 来控制它们的 展示与切换:
Discover.vue:
<template><div><h1>发现音乐</h1></div>
</template>
Friends.vue:
<template><div><h1>发现音乐</h1></div>
</template>
My.vue:
<template><div><h1>发现音乐</h1></div>
</template>
声明路由链接和占位标签
可以使用 标签来声明路由链接,并使用 标签来声明路由占位符。示例 代码如下:
App.vue:
<template>
<div>
<h1>APP组件</h1>
<!-- 声明路由链接 -->
<router-link to="/discover">发现音乐</router-link>
<router-link to="/my">我的音乐</router-link>
<router-link to="/friend">关注</router-link>
<!-- 声明路由占位标签 -->
<router-view></router-view>
</div>
</template>
创建路由模块
在项目中创建 index.js 路由模块,加入以下代码:
import VueRouter from "vue-router";
import Vue from "vue";
import Discover from "@/components/Discover.vue";
import Friends from "@/components/Friends.vue";
import My from "@/components/My.vue";
//将VueRouter设置为Vue的插件
Vue.use(VueRouter);const router = new VueRouter({// 指定hash属性与组件的对应关系routes: [{ path: '/', redirect: '/discover'},{ path: "/discover", component: Discover },{ path: "/friends", component: Friends },{ path: "/my", component: My },],
});
export default router;
挂载路由模块
在main.js中导入并挂载router
import Vue from 'vue'
import App from './App.vue'
import router from './router'Vue.config.productionTip = falsenew Vue({
render: h => h(App),
router:router
}).$mount('#app')
3. vue-router进阶
路由重定向
路由重定向指的是:用户在访问地址 A 的时候,强制用户跳转到地址 C ,从而展示特定的组件页面。 通过路由规则的 redirect 属性,指定一个新的路由地址,可以很方便地设置路由的重定向:
const router = new VueRouter({
// 指定hash属性与组件的对应关系
routes: [
// 当用户访问 / 时,跳转到 /discover
{ path: '/', redirect: '/discover'},
{ path: '/discover', component: Discover },
{ path: '/friends', component: Friends },
{ path: '/my', component: My },
] })
嵌套路由
在 Discover.vue组件中,声明 toplist和 playlist的子路由链接以及子路由占位符。示例代码如下:
<template> <div>
<h1>发现音乐</h1>
<!-- 子路由链接 -->
<router-link to="/discover/toplist">推荐</router-link>
<router-link to="/discover/playlist">歌单</router-link> <hr>
<router-view></router-view> </div>
</template>
在 src/router/index.js 路由模块中,导入需要的组件,并使用 children 属性声明子路由规则:
const router = new VueRouter({
// 指定hash属性与组件的对应关系routes: [{ path: '/', redirect: '/discover'}, {path: '/discover',component: Discover,// 通过children属性,嵌套声明子路由children: [{path:"toplist",component:TopList},{path:"playlist",component:PlayList}, ]},{ path: '/friends', component: Friends }, { path: '/my', component: My },
] })
动态路由
假如有如下 3 个路由链接:
<router-link to="/product/1">商品1</router-link>
<router-link to="/product/2">商品2</router-link>
<router-link to="/product/3">商品3</router-link>
const router = new VueRouter({
// 指定hash属性与组件的对应关系routes: [{ path: '/product/1', component: Product }, { path: '/product/2', component: Product }, { path: '/product/3', component: Product },] })
上述方式复用性非常差。
动态路由指的是:把 Hash 地址中可变的部分定义为参数项,从而提高路由规则的复用性。在 vue- router 中使用英文的冒号(:)来定义路由的参数项。示例代码如下:
{ path: '/product/:id',component:Product }
通过动态路由匹配的方式渲染出来的组件中,可以使用 $route.params
对象访问到动态匹配的参数值, 比如在商品详情组件的内部,根据id值,请求不同的商品数据。
<template><h1>Product组件</h1><!-- 获取动态的id值 --><p>{{$route.params.id}}</p>
</template><script>export default {// 组件的名称name: 'Product' }
</script>
为了简化路由参数的获取形式, vue-router 允许在路由规则中开启 props 传参。示例代码如下:
{ path: '/product/:id',component: Product, props: true }
<template><h1>Product组件</h1><!-- 获取动态的id值 --><p>{{id}}</p>
</template><script>export default {// 组件的名称name: 'Product', props : [id]}
</script>
编程式导航
除了使用 创建 a 标签来定义导航链接,我们还可以借助 router 的实例方法,通过编写 代码来实现。
想要导航到不同的 URL,则使用 router.push
方法。这个方法会向 history 栈添加一个新的记录,所 以,当用户点击浏览器后退按钮时,则回到之前的 URL。
当你点击 <router-link>
时,这个方法会在内部调用,所以说,点击 <router-link :to="...">
等 同于调用 router.push(...)
。
<template>
<button @click="gotoProduct(2)">跳转到商品2</button> </template><script>
export default { methods:{
gotoProduct: function(id){
this.$router.push('/movie/${id}') }
} }
</script>
导航守卫
导航守卫可以控制路由的访问权限。示意图如下:
全局导航守卫会拦截每个路由规则,从而对每个路由进行访问权限的控制。
你可以使用router.beforeEach
注册一个全局前置守卫:
router.beforeEach((to, from, next) => {
if (to.path === '/main' && !isAuthenticated) {next('/login')
}
else {next()
}
})
-
to : 即将要进入的目标
-
from : 当前导航正要离开的路由
-
在守卫方法中如果声明了 next 形参,则必须调用 next() 函数,否则不允许用户访问任何一个路
由!-
直接放行:next()
-
强制其停留在当前页面:next(false)
-
强制其跳转到登录页面:next(’/login’)
-
本篇小结
路由就是页面跳转,无论是通过按钮或者点击事件、图片等等都可以对应实现,用过vue3的朋友会发现其实跟vue2道理一样,细枝末节的处理可能稍有差异,还有更为复杂的场景路由,更详细全面的内容可查看官方文档
相关文章:
![](https://img-blog.csdnimg.cn/direct/6c7c3edff1e848ef97441e61ac760eb3.jpeg#pic_center)
Vue2-集成路由Vue Router介绍与使用
文章目录 路由(Vue2)1. SPA 与前端路由2. vue-router基本使用创建路由组件声明路由链接和占位标签创建路由模块挂载路由模块 3. vue-router进阶路由重定向嵌套路由动态路由编程式导航导航守卫 本篇小结 更多相关内容可查看 路由(Vue2…...
![](https://csdnimg.cn/release/blog_editor_html/release2.3.6/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=N7T8)
TemuAPI接口:获取商品详情功能
temu作为拼多多海外的跨境电商平台,已经在海外电商领域崭露头角,越来越多的外贸人选择temu作为发展平台。今天的接口可以用于获取temu平台的商品详情,包括价格、商品图片、规格、评论等内容,如有需要,请点击文末链接或…...
![](https://www.ngui.cc/images/no-images.jpg)
deepstream读取mp4文件及不同类型视频输入bug解决
在deepstream中使用mp4文件,与rtsp类似,使用uridecodebin即可,(可见官方test.py文件) def create_source_bin(index, uri):print("Creating source bin")# Create a source GstBin to abstract this bins c…...
![](https://www.ngui.cc/images/no-images.jpg)
Redis服务器统计和配置信息简介
Redis服务器统计和配置信息简介 首先使用INFO命令在Redis中用于获取Redis服务器的各种统计和配置信息;执行上述命令后,返回的信息分为多个部分,包括服务器信息、客户端信息、内存信息、持久化信息、统计信息、复制信息、CPU信息和键空间信息;…...
![](https://img-blog.csdnimg.cn/img_convert/eb641d38f764b4be5a0eec1ff0004098.png)
Linux Mac 安装Higress 平替 Spring Cloud Gateway
Linux Mac 安装Higress 平替 Spring Cloud Gateway Higress是什么?传统网关分类Higress定位下载安装包执行安装命令执行脚本 安装成功打开管理界面使用方法configure.shreset.shstartup.shshutdown.shstatus.shlogs.sh Higress官网 Higress是什么? Higress是基于阿里内部的…...
![](https://img-blog.csdnimg.cn/img_convert/76e0c6490eb8b8857c1e1e7c25e1196d.png)
基于重叠群稀疏的总变分信号降噪及在旋转机械故障诊断中的应用(MATLAB)
基于振动分析的故障诊断方法基本流程主要由以下五个步骤组成,分别是信号采集、信号处理、特征提取、状态识别与诊断结果。这五个步骤中信号采集与特征提取是故障诊断中最为重要的步骤,而故障微弱特征信息又是其中最难解决的问题。“故障微弱特征信息”站…...
![](https://i-blog.csdnimg.cn/direct/4e26899d7712464db4e2e1ba06e7f3ae.png)
【YOLOv8】 用YOLOv8实现数字式工业仪表智能读数(一)
上一篇圆形表盘指针式仪表的项目受到很多人的关注,咱们一鼓作气,把数字式工业仪表的智能读数也研究一下。本篇主要讲如何用YOLOV8实现数字式工业仪表的自动读数,并将读数结果进行输出,若需要完整数据集和源代码可以私信。 目录 &…...
![](https://i-blog.csdnimg.cn/direct/c367000b97134f5bb0948da122428d84.png)
微信小程序---npm 支持
一、构建 npm 目前小程序已经支持使用 npm 安装第三方包,但是这些 npm 包在小程序中不能够直接使用,必须得使用小程序开发者工具进行构建后才可以使用。 为什么得使用小程序开发者工具需要构建呢❓ 因为 node_modules 目录下的包,不会参与…...
![](https://i-blog.csdnimg.cn/direct/14ff341233624b2292c9c3bbbf008cbe.png)
02MFC画笔/画刷/画椭圆/圆/(延时)文字
文章目录 画实心矩形自定义画布设计及使用连续画线及自定义定义变量扇形画椭圆/圆输出颜色文本定时器与定时事件 画实心矩形 自定义画布设计及使用 连续画线及自定义定义变量 扇形 画椭圆/圆 输出颜色文本 定时器与定时事件...
![](https://i-blog.csdnimg.cn/direct/e2907f3e654a4743897c781c7ce6020e.png)
JavaWeb(四:Ajax与Json)
一、Ajax 1.定义 Ajax(Asynchronous JavaScript And XML):异步的 JavaScript 和 XML AJAX 不是新的编程语言,指的是⼀种交互方式:异步加载。 客户端和服务器的数据交互更新在局部页面的技术,不需要刷新…...
![](https://i-blog.csdnimg.cn/direct/5175cfdb74e74021989ec9675aa0e75d.png)
Spring源码中的模板方法模式
1. 什么是模板方法模式 模板方法模式(Template Method Pattern)是一种行为设计模式,它在操作中定义算法的框架,将一些步骤推迟到子类中。模板方法让子类在不改变算法结构的情况下重新定义算法的某些步骤。 模板方法模式的定义&…...
![](https://i-blog.csdnimg.cn/direct/a98de8500ee44a12929d96df7b1f76f7.png)
初学SpringMVC之 JSON 篇
JSON(JavaScript Object Notation,JS 对象标记)是一种轻量级的数据交换格式 采用完全独立于编程语言的文本格式来存储和表示数据 JSON 键值对是用来保存 JavaScript 对象的一种方式 比如:{"name": "张三"}…...
![](https://www.ngui.cc/images/no-images.jpg)
Mojo AI编程语言(三)数据结构:高效数据处理
目录 1. Mojo AI编程语言简介 2. 数据结构在数据处理中的重要性 3. Mojo AI中的基础数据结构 3.1 数组 3.2 列表 3.3 字典 4. 高效数据结构的实现与优化 4.1 哈希表 4.2 树结构 4.3 图结构 5. 高效数据处理技术 5.1 并行处理 5.2 内存优化 5.3 数据压缩 6. 实战…...
![](https://www.ngui.cc/images/no-images.jpg)
Java学习笔记整理: 关于SpringBoot 2024/7/12;
SpringBoot springboot也是spring公司开发的一款框架。为了简化spring项目的初始化搭建的。 特点specialty: springboot的特点: 1) 自动配置 Spring Boot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程&a…...
![](https://i-blog.csdnimg.cn/direct/b9b4b06aa21c4f03bd4df56e2b8aa815.png)
ASP.NET MVC Lock锁的测试
思路:我们让后台Thread.Sleep一段时间,来模拟一个耗时操作,而这个时间可以由前台提供。 我们开启两个或以上的页面,第一个耗时5秒(提交5000),第二个耗时1秒(提交1000)。 期望的测试结果: 不加Lock锁&…...
![](https://i-blog.csdnimg.cn/direct/7182560c663d4de9896dd11365df9ee1.png)
Hadoop3:HDFS-通过配置黑白名单对集群进行扩缩容,并实现数据均衡(实用)
一、集群情况介绍 我的本地虚拟机,一共有三个节点,hadoop102、hadoop103、hadoop104 二、白名单 创建白名单文件whitelist,通过白名单的配置,只允许集群包含102和103两台机器可以存储数据,104无法存储数据。 需求 …...
![](https://i-blog.csdnimg.cn/direct/1fe5f4d89e1d431da0684a2ee0b1bf75.png)
TensorFlow系列:第五讲:移动端部署模型
项目地址:https://github.com/LionJackson/imageClassification Flutter项目地址:https://github.com/LionJackson/flutter_image 一. 模型转换 编写tflite模型工具类: import osimport PIL import tensorflow as tf import keras import …...
![](https://i-blog.csdnimg.cn/direct/3f08f91c191144d4a2c9729c3053ce12.png)
深度学习DeepLearning二元分类 学习笔记
文章目录 类别区分变量与概念逻辑回归Sigmoid函数公式决策边逻辑损失函数和代价函数逻辑回归的梯度下降泛化过拟合的解决方案正则化 类别区分 变量与概念 决策边置信度阈值threshold过拟合欠拟合正则化高偏差lambda(λ) 线性回归受个别极端值影响&…...
![](https://www.ngui.cc/images/no-images.jpg)
Eureka 介绍与使用
Eureka 是一个开源的服务发现框架,它主要用于在分布式系统中管理和发现服务实例。它由 Netflix 开发并开源,是 Netflix OSS 中的一部分。 使用 Eureka 可以方便地将新的服务实例注册到 Eureka 服务器,并且让其他服务通过 Eureka 服务器来发现…...
![](https://i-blog.csdnimg.cn/direct/d241dd902daf4006a6e228055889142f.png)
Java异常体系、UncaughtExceptionHandler、Spring MVC统一异常处理、Spring Boot统一异常处理
概述 所有异常都是继承自java.lang.Throwable类,Throwable有两个直接子类,Error和Exception。 Error用来表示程序底层或硬件有关的错误,这种错误和程序本身无关,如常见的NoClassDefFoundError。这种异常和程序本身无关࿰…...
![](https://www.ngui.cc/images/no-images.jpg)
bash终端快捷键
快捷键作用ShiftCtrlC复制ShiftCtrlV粘贴CtrlAltT新建终端ShiftPgUp/PgDn终端上下翻页滚动CtrlC终止命令CtrlD关闭终端CtrlA光标移动到最开始为止CtrlE光标移动到最末尾CtrlK删除此处到末尾的所有内容CtrlU删除此处至开始的所有内容CtrlD删除当前字符CtrlH删除当前字符的前一个…...
![](https://www.ngui.cc/images/no-images.jpg)
【Visual Studio】Visual Studio报错合集及解决办法
目录 Visual Studio报错:error LNK2001 Visual Studio报错:error C2061 Visual Studio报错:error C1075 Visual Studio报错:error C4430 Visual Studio报错error C3867 概述 持续更细Visual Studio报错及解决方法 Visual Studio报错:error LNK2001 问题 : error LNK2001…...
![](https://i-blog.csdnimg.cn/direct/ec286151b88241b19de6b9154ba14cb8.png)
【微信小程序知识点】转发功能的实现
转发功能,主要帮助用户更流畅地与好友分享内容与服务。 想实现转发功能,有两种方式: 1.页面js文件必须声明onShareAppMessage事件监听函数,并自定义转发内容。只有定义了此事件处理函数,右上角菜单才会显示“转发”按…...
![](https://i-blog.csdnimg.cn/direct/0d570197d4974d60a4473055d36c544a.png)
用python识别二维码(python实例二十三)
目录 1.认识Python 2.环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3.识别二维码 3.1 代码构思 3.2 代码实例 3.3 运行结果 4.总结 1.认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读性&…...
![](https://csdnimg.cn/release/blog_editor_html/release2.3.6/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=N7T8)
电脑文件夹怎么设置密码?让你的文件更安全!
在日常使用电脑的过程中,我们常常会有一些需要保护的个人文件或资料。为了防止这些文件被他人未经授权访问,对重要文件夹设置密码是一种有效的保护措施,可是电脑文件夹怎么设置密码呢?本文将介绍2种简单有效的方法帮助您为电脑文件…...
![](https://i-blog.csdnimg.cn/direct/51817f202f4c45009a8866514f561cc7.png)
paddla模型转gguf
在使用ollama配置本地模型时,只支持gguf格式的模型,所以我们首先需要把自己的模型转化为bin格式,本文为paddle,onnx,pytorch格式的模型提供说明,safetensors格式比较简单请参考官方文档,或其它教…...
![](https://www.ngui.cc/images/no-images.jpg)
Memcached vs Redis——Java项目缓存选择
在Java项目开发中,缓存系统作为提升性能、优化资源利用的关键技术之一,扮演着至关重要的角色。Memcached和Redis作为两种流行的缓存解决方案,各有其独特的优势和应用场景。本文旨在通过分析项目大小、用户访问量、业务复杂度以及服务器部署情…...
![](https://img-blog.csdnimg.cn/img_convert/44c82031ab8761a7bfb2af9af8b4e2fc.png)
大模型最新黑书:基于GPT-3、ChatGPT、GPT-4等Transformer架构的自然语言处理 PDF
今天给大家推荐一本丹尼斯罗斯曼(Denis Rothman)编写的关于大语言模型(LLM)权威教程<<大模型应用解决方案> 基于GPT-3、ChatGPT、GPT-4等Transformer架构的自然语言处理>!Google工程总监Antonio Gulli作序,这含金量不…...
![](https://www.ngui.cc/images/no-images.jpg)
【电子数据取证】电子数据司法鉴定
文章关键词:电子数据取证、司法鉴定服务、司法鉴定流程 一、定义 什么是司法鉴定? 在诉讼活动中鉴定人运用科学技术或者专业知识对诉讼涉及的专门性问题进行鉴别和判断并提供鉴定意见的活动。 电子数据司法鉴定 那么电子数据司法鉴定,就…...
![](https://www.ngui.cc/images/no-images.jpg)
使用 OpenCV 的 inRange 函数进行颜色分割
使用 OpenCV 的 inRange 函数进行颜色分割 在图像处理领域,颜色分割是一个常见的任务,常用于识别和提取图像中的特定颜色区域。OpenCV 提供了一个非常方便的函数 inRange 来实现这一功能。在这篇博客中,我们将详细介绍 inRange 函数的用法&a…...
![](http://www.xphome.org/upload/2016/08/20/1839/147168955767925937779b.jpg)
网站支付宝支付接口申请/百度刷seo关键词排名
有经常使用电脑的朋友向我反映难以解决的问题,根据小编的调查并不是所有的朋友都知道win7系统安装完oracle电脑变卡的问题怎么解决,因此我就给大家整理总结了win7系统安装完oracle电脑变卡的完整解决方案,你只需要按照1、首先打开自己的控制面…...
![](/images/no-images.jpg)
申请网站空间是申请域名吗/网站内容优化关键词布局
http://www.oracle.com/technetwork/java/javase/archive-139210.html 转载于:https://www.cnblogs.com/tianlai/p/4928312.html...
wordpress 网易云音乐插件/b站视频推广的方法有哪些
海康设备网络SDK是基于设备私有网络通信协议开发的,为嵌入式网络硬盘录像机、NVR、网络摄像机、等网络产品服务的配套模块,用于远程访问和控制设备软件的二次开发。 使用海康sdk私有协议拉取远端设备视频流时,如何观察拉流的状态,…...
![](/images/no-images.jpg)
橙子建站是哪个平台/在线工具seo
1957年 约翰巴科斯(John Backus)创建了是全世界第一套高阶语言:FORTRAN。 1959年 葛丽丝霍普(Grace Hopper)创造了现代第一个编译器A-0 系统,以及商用电脑编程语言“COBOL”,被誉为COBOL之母 。…...
![](/images/no-images.jpg)
平湖市住房和城乡规划建设局网站/关键词优化排名第一
在 Windows Internet Explorer 9 和更早的版本中,每个网页中最多只能有 31 个样式表。而且,对于使用 import 规则关联的样式表,最多只能进行四级嵌套。 在 Internet Explorer 10(以及使用 JavaScript 的 Windows 应用商店应用&…...
![](/images/no-images.jpg)
用dw做网站首页步骤/百度的网址怎么写
这个网站没有反扒,使用的是Python 自带urllib ,解析库数xpath,生成器,数据保存到mongodb。代码 from urllib import request from pymongo import MongoClientfrom lxml import etreeclinet MongoClient(hostlocalhost, port27017) class R…...