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

Vue-router

router的使用(5+2)

5个基础步骤:

1.在终端执行yarn add vue-router@3.6.5,安装router插件

yarn add vue-router@3.6.5

2.在文件的main.js中引入router插件

import VueRouter from 'vue-router'

3.在main.js中安装注册Vue.use(Vue插件)

Vue.use(VueRouter)

4.在main.js中创建路由对象

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 Friend from './views/Friend.vue'
import My from './views/My.vue'
Vue.use(VueRouter)//VueRouter插件初始化const router = new VueRouter({// 路由规则routes:[{path:'/find',component:Find},{path:'/my',component:My},{path:'/friend',component:Friend}]
})

2.准备导航链接,配置路由出口

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

Vue Router 提供了以下常用的标签和功能:

  1. <router-link>:渲染一个 <a> 标签,点击时会导航到指定的路由。
  2. <router-view>:用于渲染匹配到的路由组件。
  3. router-link 组件的 to 属性:用于指定要跳转的目标路由,可以是字符串或对象。
  4. router-view 组件:用于根据当前路由匹配到的组件进行渲染。

路由的封装抽离

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

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

在src目录下创建router文件,在文件中创建index.js文件,将main.js中的路由模块抽离到index.js文件中

import VueRouter from 'vue-router'
import Find from '../views/Find.vue'
import Friend from '../views/Friend.vue'
import My from '../views/My.vue'import Vue from 'vue'
Vue.use(VueRouter)//VueRouter插件初始化const router = new VueRouter({// 路由规则routes:[{path:'/find',component:Find},{path:'/my',component:My},{path:'/friend',component:Friend}]
})export default router

在main.js中引入index.js文件

import router from './router'

声明式导航-导航链接

需求:实现导航高亮效果

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

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

1.router-link-active 模糊匹配(用的多)

to = '/my' 可以匹配/my      /my/a      /my/b   .......

2.router-link-exact-active 精确匹配

to = '/my' 仅可以匹配 /my

<template><div><div class="footer_wrap"><router-link to="/find">发现音乐</router-link><router-link to="/my">我的音乐</router-link><router-link to="/friend">我的朋友</router-link></div><div><router-view></router-view></div></div>
</template>
.footer_wrap a.router-link-active{background-color: aqua;
}

自定义匹配类名

const router = new VueRouter({// 路由规则routes:[{path:'/find',component:Find},{path:'/my',component:My},{path:'/friend',component:Friend}],linkActiveClass:'active',linkExactActiveClass:'exact-avtive'})
.footer_wrap a.active{background-color: aqua;
}

声明式导航-跳转传参

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

1.查询参数传参

语法格式如下

  • to = '/path?参数名 = 值'

对应页面组件接收传递过来的值

  • $route.query.参数名
<template><div class="home"><router-link to="/search?key=百度">百度</router-link><router-link to="/search?key=网易">网易</router-link><router-link to="/search?key=腾讯">腾讯</router-link></div>
</template>
<template><div><p>搜索关键字:{{ $route.query.key }}</p><p></p></div>
</template>

2.动态路由传参

1.配置动态路由

const router = new VueRouter({// 路由规则routes:[{path:'/search/:words',component:Search},{path:'/home',component:Home}],linkActiveClass:'active',linkExactActiveClass:'exact-avtive'})

2.配置导航链接

  • to="/path/参数值"
<template><div class="home"><router-link to="/search/百度">百度</router-link><router-link to="/search/网易">网易</router-link><router-link to="/search/腾讯">腾讯</router-link></div>
</template>

3.对应页面组件接收传递过来的值

  • $route.params.参数名
<template><div><p>搜索关键字:{{ $route.params.words }}</p><p></p></div>
</template>

Vue路由-重定向

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

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

语法:

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

const router = new VueRouter({// 路由规则routes:[{path:'/',redirect:'/home'},{path:'/search/:words',component:Search},{path:'/home',component:Home}],linkActiveClass:'active',linkExactActiveClass:'exact-avtive'})

Vue路由-404

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

位置:配在路由最后

语法:

{path:"*"(任意路径)-前面不匹配就命中最后这个}

const router = new VueRouter({// 路由规则routes:[{path:'/',redirect:'/home'},{path:'/search/:words',component:Search},{path:'/home',component:Home},{path:'*',component:NotFound}],linkActiveClass:'active',linkExactActiveClass:'exact-avtive'})

Vue路由-模式设置

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

  • hash路由(默认)例如:http://localhost:8080/#/home
  • history路由(常用)例如:http://localhost:8080/home(以后上线需要服务器端支持)
const router = new VueRouter({mode:'history',// 路由规则routes:[{path:'/',redirect:'/home'},{path:'/search/:words',component:Search},{path:'/home',component:Home},{path:'*',component:NotFound}],linkActiveClass:'active',linkExactActiveClass:'exact-avtive'})

历史记录在vue-router中的使用

历史记录在Vue Router中主要通过router对象来管理。具体来说,你可以使用this.$router来访问router对象。

要在Vue Router中使用历史记录,你可以通过以下方式进行操作:

编程式导航: 你可以使用this.$router.push()方法来向历史记录添加一个新的条目,或者使用this.$router.replace()方法来替换当前的历史记录条目。例如:

// 添加新的历史记录条目
this.$router.push('/new-route');// 替换当前的历史记录条目
this.$router.replace('/new-route');

控制历史记录: 你可以使用this.$router.go()方法来在历史记录中前进或后退多少步,也可以使用this.$router.back()this.$router.forward()方法来执行后退或前进操作。

// 后退一步
this.$router.go(-1);// 前进一步
this.$router.go(1);

监听历史记录变化: 你可以通过监听this.$router对象的事件来处理历史记录的变化。例如,你可以监听beforeEachbeforeResolveafterEach等事件来执行相应的操作。

this.$router.beforeEach((to, from, next) => {// 在导航触发之前执行的逻辑
});this.$router.afterEach((to, from) => {// 导航完成后执行的逻辑
});

实现嵌套路由

// 父路由组件
const router = new VueRouter({routes: [{ path: '/parent', component: ParentComponent, children: [{ path: 'child', component: ChildComponent }]}]
});

命名视图

命名视图(Named Views)是 Vue Router 提供的一项功能,允许你在同一个页面中同时显示多个命名视图的内容。这在构建复杂的页面布局时非常有用,可以让不同的组件渲染到页面中不同的位置。

在 Vue Router 中使用命名视图,需要在路由配置中指定每个视图的名称,并在组件中使用 <router-view> 标签来显示对应名称的视图内容。

const router = new VueRouter({routes: [{path: '/',components: {default: HomeComponent,header: HeaderComponent,sidebar: SidebarComponent}}]
});

在上面的路由配置中,我们定义了三个命名视图:defaultheadersidebar,分别对应不同的组件。然后在页面模板中可以这样使用:

<div id="app"><router-view name="header"></router-view><router-view></router-view> <!-- 默认会显示 default 视图 --><router-view name="sidebar"></router-view>
</div>

导航守卫

导航守卫是 Vue Router 中用于控制路由跳转的功能,可以在路由导航过程中进行一些操作,比如权限验证、页面加载前后的处理等。导航守卫主要分为全局前置守卫、全局解析守卫、全局后置钩子和路由独享守卫。

1. 全局前置守卫(Global Before Guards)

  • beforeEach(to, from, next):在路由跳转之前调用,常用于进行权限验证或其他全局操作。

2. 全局解析守卫(Global Resolve Guards)

  • beforeResolve(to, from, next):在导航被确认之前,同时在所有组件内守卫和异步路由组件被解析之后调用。

3. 全局后置钩子(Global After Hooks)

  • afterEach(to, from):在导航完成之后调用,常用于页面切换后的一些操作。

4. 路由独享守卫(Per-Route Guard)

  • beforeEnter(to, from, next):在单个路由配置中定义的守卫,在进入该路由前调用。
  • const router = new VueRouter({routes: [{path: '/home',component: HomeComponent,beforeEnter: (to, from, next) => {// 进入路由前的操作,如权限验证if (userAuthenticated) {next();} else {next('/login');}}}]
    });router.beforeEach((to, from, next) => {// 全局前置守卫,可用于登录状态验证等next();
    });router.afterEach((to, from) => {// 全局后置钩子,在导航完成后调用
    });
    

    路由元信息

    路由元信息是 Vue Router 中一种特殊的字段,允许你在路由对象中添加额外的自定义信息,比如页面标题、权限要求、页面描述等。这些元信息可以在路由导航过程中访问,并根据需要进行处理。

    export default {mounted() {console.log(this.$route.meta.title); // 输出 'Home Page'}
    };
    

在路由组件中,你可以通过 this.$route.meta 来访问路由的元信息

const router = new VueRouter({routes: [{path: '/',component: Home,meta: { requiresAuth: true, title: 'Home Page' }}]
});

路由过渡动效

Vue Router 提供了过渡效果的功能,可以让页面在路由切换时产生动画效果,提升用户体验。你可以使用 Vue 的 <transition> 组件或 <transition-group> 组件来实现路由过渡动效。

使用 <transition> 组件:

<template><transition name="fade" mode="out-in"><router-view></router-view></transition>
</template><style>
.fade-enter-active, .fade-leave-active {transition: opacity 0.5s;
}
.fade-enter, .fade-leave-to {opacity: 0;
}
</style>

使用 <transition-group> 组件:

<template><transition-group name="slide" mode="out-in"><router-view></router-view></transition-group>
</template><style>
.slide-enter-active, .slide-leave-active {transition: transform 0.5s;
}
.slide-enter, .slide-leave-to {transform: translateX(100%);
}
</style>

相关文章:

Vue-router

router的使用&#xff08;52&#xff09; 5个基础步骤&#xff1a; 1.在终端执行yarn add vue-router3.6.5&#xff0c;安装router插件 yarn add vue-router3.6.5 2.在文件的main.js中引入router插件 import VueRouter from vue-router 3.在main.js中安装注册Vue.use(Vue…...

白皮书发布|超融合运行 K8s 的场景、功能与优势

目前&#xff0c;不少企业都使用虚拟化/超融合运行 Kubernetes 和容器化应用。一些用户可能会有疑惑&#xff1a;既然 Kubernetes 可以部署在裸金属上&#xff0c;使用虚拟化不是“多此一举”吗&#xff1f; 在电子书《IT 基础架构团队的 Kubernetes 管理&#xff1a;从入门到…...

全局Ceph节点宕机处理

在极端情况下&#xff0c;如数据中心断电&#xff0c;造成 Ceph 存储集群全局宕机&#xff0c;可以按照本节所示流程进行 Ceph 集群上电恢复操作。 4.1 手动上电执行步骤 如为 Ceph 集群上电&#xff0c;monitor server 应最先上电&#xff1b;集群上电前确认使用 Ceph 之前端…...

电脑中缺失EMP.dll文件怎么办,解决EMP.dll丢失问题的有效方法分享

当你的电脑出现由于找不到emp.dll无法继续执行代码的提示&#xff0c;那你要怎么办呢&#xff1f;其实解决方法还是挺多的&#xff0c;今天就来给大家详细的说说emp.dll这方面的信息吧。 一、电脑为什么会出现emp.dll丢失 不完全卸载软件&#xff1a;在卸载程序时&#xff0c;…...

Linux 进程程序替换

&#x1f493;博主CSDN主页:麻辣韭菜-CSDN博客&#x1f493;   ⏩专栏分类&#xff1a;http://t.csdnimg.cn/G90eI⏪   &#x1f69a;代码仓库:Linux: Linux日常代码练习&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习更多Linux知识   &#x1f51d;&#x1f5…...

系统分析与设计(一)

我们有这么多各式各样的工具,互联网给我们带来了这么多用户和数据,这是好事也有副作用。 世界上能访问用户数据,并根据数据做分析和改进的公司,大概Google是其中翘楚,这种 data-centric 的做法做过了头,也有悲剧发生: Douglas Bowman 曾经是Google 的视觉设计主管,2009年的一天…...

【QT】自定义控件的示例

自定义控件&#xff08;很重要&#xff09; 什么是自定义控件&#xff1f; 顾名思义就是创建一个窗口&#xff0c;放入多个控件&#xff0c;拼接起来&#xff0c;一起使用。 为什么需要它&#xff1f; 需求&#xff0c;假设有100个窗口&#xff0c;那如果有两个控件同时被使…...

Rust入门:Rust如何调用C静态库的函数

关于Rust调用C&#xff0c;因为接口比较复杂&#xff0c;貌似Rust不打算支持。而对于C函数&#xff0c;则相对支持较好。 如果要研究C/Rust相互关系的话&#xff0c;可以参考&#xff1a; https://docs.rs/cxx/latest/cxx/ Rust ❤️ C 这里只对调用C静态库做一个最简短的介…...

阿里云Linux系统MySQL8忘记密码修改密码

相关版本 操作系统&#xff1a;Alibaba Cloud Linux 3.2104 LTS 64位MySQL&#xff1a;mysql Ver 8.0.34 for Linux on x86_64 (Source distribution) MySQL版本可通过下方命令查询 mysql --version一、修改my.cnf文件 文件位置&#xff1a;etc/my.cnf进入远程连接后可以打…...

初识C语言—字符串、转义字符、注释

字符串 字符串就是一串字符 用英文双引号括起来的字符 int main() {"dasgfhjkasg\n""hello world!"return 0; } 字符串的结束标志是\0这个转义字符 如何证明呢&#xff1f; int main() {//字符数组 - 数组是一组相同类型的元素char arr[] "hel…...

洛谷 P1731 [NOI1999] 生日蛋糕

题目 题目链接 自己没看题解写的&#xff0c;摸石头过河&#xff0c;解释一下 首先&#xff0c;输入输出都是正整数。先搞定输入&#xff0c;再判断条件&#xff0c;如果无解&#xff0c;输出0&#xff0c;否则输出蛋糕外表面面积Q&#xff08;这里用全局变量&#xff0c;开l…...

操作教程|使用MeterSphere对恒生UFX系统进行压力测试

恒生UFX&#xff08;United Finance Exchange&#xff0c;统一金融交换&#xff09;系统&#xff08;以下简称为“UFX系统”&#xff09;&#xff0c;是一款帮助证券公司统一管理外部接入客户的系统&#xff0c;该系统整体上覆盖了期货、证券、基金、银行、信托、海外业务等各类…...

算法中的数学知识

文章目录 算法中的数学知识约数约数个数约数之和 筛法求质数阶乘分解解法一解法二&#xff1a; 欧拉函数基本模板筛法求欧拉函数大数据幂的欧拉函数 快速幂费马小定理快速幂求逆元数论分块例题&#xff1a;[因数平方和](https://www.acwing.com/problem/content/4665/)分析:具体…...

2024高频前端面试题 Vue2 和 Vue3 篇

HTML和CSS篇&#xff1a;2024高频前端面试题 HTML 和 CSS 篇-CSDN博客 JavaScript 和 ES6 篇&#xff1a; 2024高频前端面试题 JavaScript 和 ES6 篇-CSDN博客 * Vue2 和 Vue3的区别&#xff1a; 1&#xff09;双向数据绑定原理的区别 2&#xff09;根节点的不同 Vue2只能一…...

vue,Promise备忘

网址 https://www.promisejs.org/ 记录 在Vue.js或者其他JavaScript项目中&#xff0c;Promise 是一种处理异步操作的标准机制&#xff0c;用于解决传统的回调地狱问题&#xff0c;提供了一种更优雅、链式调用的编程模型。Promise对象代表一个异步操作的结果&#xff0c;它可…...

软件测试工程师职位笔试知识点细节(2)

一、软件测试分为哪几个阶段&#xff0c;生命周期&#xff1f; 软件测试一般分为单元测试、集成测试和系统测试。 需求分析→测试计划→测试设计、软件开发→测试执行→测试评估 二、一条软件缺陷&#xff08;或者叫Bug&#xff09;记录都包含了哪些内容&#xff1f; 一条Bug…...

大数据冷热分离方案

数据冷热分离方案 1、背景 ​ 随着业务的发展&#xff0c;在线表中的数据会逐渐增加。常规业务都有冷热数据现象明显的特性&#xff08;需要访问的都是近期产生的热数据&#xff1b;时间久远的冷数据出于备份、备案溯源等诉求会进行在线保留&#xff09;。在业务表数据 量可控…...

Vue3中Vue Router的使用区别

在 Vue 3 中&#xff0c;useRouter 和 useRoute 是两个用于 Vue Router 的 Composition API 函数&#xff0c;它们的用途和返回的对象不同&#xff0c;接下来详细了解一下它们的区别以及如何正确使用它们。 useRouter useRouter 用于获取 router 实例&#xff0c;这个实例提供…...

Open CASCADE学习|读取STEP模型文件到XDE中

目录 1、XDE组件简介 2、读取STEP模型文件到XDE中的步骤 3、案例 1、XDE组件简介 Open CASCADE的XDE&#xff08;扩展数据交换&#xff09;组件是一个关键的工具&#xff0c;它允许用户通过转换附加到几何BREP&#xff08;边界表示&#xff09;数据的附加数据来扩展数据交换…...

flink:自定义数据分区

shuffle随机地将数据分配到下游的子任务。 rebalance用round robbin模式将数据分配到下游的子任务。 global把所有的数据都分配到一个分区。 partitionCustom: 自定义数据分区。 package cn.edu.tju.demo; import org.apache.flink.api.common.functions.; import org.apache…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...