vue-router路由(重定向,嵌套,动态路由匹配,命名,高亮,守卫)

一、前端路由的概念与原理

路由router就是对应关系。分为前端路由和后端路由。

1后端路由

后端路由指的是:请求方式、请求地址与function处理函数之间的对应关系。在node.js中,express理由的基本用法如下:

const express = require('express');
const router = express.Router();router.get('/user', function(req, res){//路由处理函数
});
router.post('/user', function(req, res){//路由处理函数
});module.exports=router
2.前端路由

spa是一个web网站只有一个唯一的html页面,所有组件的展示与切换都在这唯一的一个页面完成。不同组件之间的切换需要通过前端路由来实现。

前端路由是hash地址和组件之间的对应关系。

3.前端路由的工作方式

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

导致URL地址栏中的hash值发生了变化

前端路由监听到hash地址的变化

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

//页面上的路由链接
<a href=''#/home></a>//前端路由的对应关系
{path:'#/home',component:Home}//页面上要展示的组件
<Home/>
4.模拟实现简单前端路由
<template><a href="#/box">about</a><a href="#/demo">demo</a><hr><component :is="comName"></component>
</template>
<script >
import Box from "../box/index.vue";
import Demo from "../demo/index.vue";
export default{components:{Mato,Demo},data(){return{comName:""}},created(){window.onhashchange=()=>{switch(location.hash){case '#/box':this.comName='Box';breakcase '#/demo':this.comName='Demo';break}}}
}

二、vue-router

vue-router4.x版本只能结合vue3使用

1.基本使用步骤

a.在项目中安装vue-router

npm install vue-router@next -S
//next是最新版本

b.定义路由组件

c.声明路由链接和占位符

//声明路由链接
<router-link to='/home'>首页</router-link>
//声明路由占位符
<router-view></router-view>

d.创建路由模块

import {createRouter,createWebHashHistory} from "vue-router";import home from "../views/home/index.vue";
import about from "../views/about/index.vue";const router=createRouter({history:createWebHashHistory(import.meta.env.Base_URL),routes:[{  path:"/", redirect:"/home" },{  path:"/home", name:"/home", component:home  },{  path:"/about", name:"/about", component:about  }]
})export default router;

e.导入并挂载路由

//main.js
import router from "./routers/index.js";
app.use(router)

 history:createWebHashHistory(import.meta.env.Base_URL),如果不写()会报错,可以写成history:createWebHashHistory()

2.路由重定向redirect

用户在访问地址a的时候,强制用户跳转到地址c,从而展示特定的组件页面。

 {  path:"/", redirect:"/home" },
3.路由高亮
a.router-link-active的类名

被激活的路由链接,默认会应用一个叫做router-link-active的类名。开发者可以使用此类名选择器,为激活的路由链接设置高亮的样式

<template><div><router-link to="/home">home</router-link><router-link to="/about">about</router-link><hr><router-view></router-view></div>
</template>
<script setup>
</script>
<style scoped>
.router-link-active{background-color: red;color: #fff;font-weight: bold;
}
</style>
b.linkActiveClass属性

在创建路由的实例对象时,可以基于linkActiveClass属性,自定义路由被激活时所应用的类名

import {createRouter,createWebHashHistory} from "vue-router";import home from "../views/home/index.vue";
import about from "../views/about/index.vue";const router=createRouter({history:createWebHashHistory(import.meta.env.Base_URL),linkActiveClass:'router-active'routes:[{  path:"/", redirect:"/home" },{  path:"/home", name:"/home", component:home  },{  path:"/about", name:"/about", component:about  }]
})export default router;
//style.css
.router-active{background-color: red;color: #fff;font-weight: bold;
}
4.嵌套路由
//嵌套路由 {path:'/about',component:About,children:[{path:'tab1',component:Tab1 },{path:'tab2', component:Tab2 }]}//嵌套组件
<template><router-link to="/about/tab1">tab1</router-link><router-link to="/about/tab2">tab2</router-link><hr><router-view></router-view>
</template>

嵌套路由的重定向

        {path:'/about',component:About,redirect:'/about/tab1',children:[{path:'tab1',component:Tab1 },{path:'tab2', component:Tab2 }]}
5.动态路由匹配

把hash地址中可变的部分定义为参数项,从而提高路由规则的复用性。

<template><div><router-link to="/movie/1">movie1</router-link><router-link to="/movie/2">movie2</router-link><router-link to="/movie/3">movie3</router-link><hr><router-view></router-view></div>
</template>{path:'/movie/:id',component:Movie,}<template><div>movie</div>{{ $route.params.id }}
</template>
使用props接收路由参数

为了简化路由参数的获取形式,vue-router允许在路由规则中开启props传参。

        {path:'/movie/:id',component:Movie,props:true}<template><div>movie</div>{{ id }}<hr>
</template>
<script>
export default{props:['id']
}
</script>
6.vue-router中编程式导航api

通过调用api实现导航的方式叫做编程式导航。调用location.href跳转到新页面

通过点击链接实现导航的方式叫做声明式导航。<a/><router-link>标签

a.this.$router.push('hash地址')

跳转到指定hash地址,从而展示对应的组件

<template><div>home</div><button @click="goToMovie(3)">导航去movie页面</button>
</template>
<script >
export default{methods:{goToMovie(id){this.$router.push(`/movie/${id}`)}}
}
</script>
b.this$router.go() 

实现导航历史的前进,后退

<template><div>movie</div>{{ id }}<button @click="goBack">后退</button><hr>
</template>
<script>
export default{props:['id'],methods:{goBack(){this.$router.go(-1)}}
}
</script>
7.命名路由(添加name属性)

通过name属性为路由规则定义名称的方式叫做命名路由。

明明路由name必须唯一,不能重复。

{path:'/movie/:id',name:'movie',component:Movie,props:true}
<template><div>home</div><button @click="goToMovie(3)">导航去movie页面</button><router-link :to="{name:'movie',params:{id:3}}">导航去movie页面</router-link>
</template>
<script >
export default{methods:{goToMovie(id){this.$router.push({name:'movie',params:{id:id}})}}
}
</script>

三、导航守卫

导航首位可以控制路由的访问权限。

1.如何声明全局路由守卫

全局导航首位会拦截每个路由规则,从而对每个路由进行访问权限的控制。

2.路由守卫的3个参数to,from,next

to目标路由对象

from 当前导航正要离开的路由对象

next是一个函数,表示放行。不声明next参数,则默认用户可以访问每一个路由,声明了next参数,则必须调用next()函数,否则不允许用户访问任何一个路由。next(false);强制其停留在当前页面;next(‘’/login);强制其跳转到指定页面

router.beforeEach((to,from,next)=>{const token = localStorage.getItem('token');if(to.path==='/main' && !token){console.log('goHome');next('/home')}else{next()}
})

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

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

相关文章

IPsec-Vpn

网络括谱图 IPSec-VPN 配置思路 1 配置IP地址 FWA:IP地址的配置 [FW1000-A]interface GigabitEthernet 1/0/0 [FW1000-A-GigabitEthernet1/0/0]ip address 10.1.1.1 24 [FW1000-A]interface GigabitEthernet 1/0/2 [FW1000-A-GigabitEthernet1/0/2]ip address

【编程底层原理】Java常用读写锁的使用和原理

一、引言 在Java的并发世界中&#xff0c;合理地管理对共享资源的访问是至关重要的。读写锁&#xff08;ReadWriteLock&#xff09;正是一种能让多个线程同时读取共享资源&#xff0c;而写入资源时需要独占访问的同步工具。本文将带你了解读写锁的使用方法、原理以及它如何提高…

基于SSM的“银发在线教育云平台”的设计与实现(源码+数据库+文档)

基于SSM的“银发在线教育云平台”的设计与实现&#xff08;源码数据库文档) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SSM 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 首页页面图 健身养生详情页面 在线课堂界面 …

解决 Prettier ESLint 错误

解决 Prettier ESLint 错误 在 Vue.js 项目中使用 ESLint 和 Prettier 时&#xff0c;你可能会遇到类似以下的错误&#xff1a; frontend\src\views\dashboard\MobileConfigPanel.vue1:25 error Delete ␍ …

ByteTrack多目标跟踪流程图

ByteTrack多目标跟踪流程图 点个赞吧&#xff0c;谢谢。

Linux:文件描述符详解

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 Linux中的所有进程&#xff0c;都拥有自己的文件描述符(File Descriptor, FD)&#xff0c;它是操作系统在管理进程和文件时的一种抽象概念。每个文件描述符由一个非负整…

Error when custom data is added to Azure OpenAI Service Deployment

题意&#xff1a;在向 Azure OpenAI 服务部署添加自定义数据时出现错误。 问题背景&#xff1a; I receive the following error when adding my custom data which is a .txt file (it doesnt matter whether I add it via Azure Cognitive Search, Azure Blob Storage, or F…

网络安全等级保护 | 规范企业网络系统安全使用 | 天锐股份助力等保制度落地

在当今数字化高速发展的时代&#xff0c;网络安全对于企业的重要性日益凸显。而近年来&#xff0c;数据泄露、网络攻击等安全事件频发&#xff0c;给企业和个人带来了前所未有的挑战。在这一背景下&#xff0c;网络安全等级保护制度&#xff08;简称“等保”&#xff09;作为国…

安卓13删除下拉栏中的设置按钮 android13删除设置按钮

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改5.编译6.彩蛋1.前言 顶部导航栏下拉可以看到,底部这里有个设置按钮,点击可以进入设备的设置页面,这里我们将更改为删除,不同用户通过这个地方进入设置。也就是下面这个按钮。 2.问题分析…

Java面试题大全(全网最全,持续更新)中级(3)

1. 集合框架 1.1. ConcurrentHashMap 和 HashMap 有什么区别&#xff1f; HashMap&#xff1a;线程不安全&#xff0c;适用于单线程环境。ConcurrentHashMap&#xff1a;线程安全&#xff0c;适用于多线程环境&#xff0c;使用分段锁机制来提高并发性能。 1.2. TreeSet 如何实…

【C++掌中宝】走进C++引用的世界:从基础到应用

文章目录 引言1. 基础概念2. 引用与指针的区别3. 引用的应用场景3.1 引用作为函数参数3.2 引用作为函数返回值3.3 常引用&#xff08;const引用&#xff09;的使用3.4 引用与多态 4. C 引用的优缺点5. 引用的注意事项与常见陷阱6. 总结结语 引言 C 引用是编写高效、简洁代码的…

新品亮相|美格智能SLM530/SLM530P智能模组,助力金融新零售智慧升级

随着金融支付产业数字化与智能化不断推进&#xff0c;泛支付场景一体化解决方案成为行业发展的新趋势&#xff0c;从手持POS机到智能收款机&#xff0c;金融支付领域需要更快速、更精准、更安全的解决方案&#xff0c;加快推进数字化升级进程。 近期&#xff0c;美格智能正式发…

计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-18

计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-18 1. The Application of Large Language Models in Primary Healthcare Services and the Challenges W YAN, J HU, H ZENG, M LIU, W LIANG - Chinese General Practice, 2024 人工智能大语言模型在基层医疗…

基于深度学习的文本情感原因提取研究综述——论文阅读

前言 既然要学习情感分析&#xff0c;那么肯定还要了解情感原因对抽取的发展历程&#xff0c;所以我又搜了一篇研究综述&#xff0c;虽然是2023年发表的&#xff0c;但是里面提及到的历程仅停留到2022年。这篇综述发布在TASLP期刊&#xff0c;是音频、声学、语言信号处理的顶级…

静态路由和默认路由(实验)

目录 一、实验设备和环境 1、实验设备 2、实验环境 &#xff08;1&#xff09;实验拓扑图 &#xff08;2&#xff09;实验命令列表 二、实验记录 1、直连路由与路由表查看 步骤1:建立物理连接并运行超级终端。 步骤2:在路由器上查看路由表。 2、静态路由配置 步骤1:配…

哈希表与离散化

一、字符串哈希 1. 什么是哈希 哈希算法是&#xff1a;通过哈希函数将字符串、较大的数等转换为能够用变量表示的或者是直接作为数组下标的数&#xff0c;通过哈希算法转换到的值&#xff0c;称之为哈希值。哈希值可以实现快速查找和匹配。 比如&#xff1a;用数组下标计数法&…

QT widgets 窗口缩放,自适应窗口大小进行布局

1. 窗口布局 2. 尺寸策略&#xff1a;扩展 Fixed (固定): 行为&#xff1a;控件的大小是固定的&#xff0c;不会随着窗口大小的变化而改变。它的大小由控件的 sizeHint() 返回的值决定。 适用场景&#xff1a;当你希望控件的大小保持不变&#xff0c;不随布局调整时使用&#x…

Windows下利用MSYS2和VS的nmake编译nginx源码

目录 一、使用说明 二、安装软件 2.1 下载依赖库 2.3 下载并安装 StrawberryPerl 2.4 下载并安装 MSYS 2 2.5 nginx源代码下载 三、编译配置 3.1 设置NGX_MSVC_VER 3.2 配置 Makefile 3.3 编译代码 3.4 整理Nginx发布环境 四、错误处理 一、使用说明 本文章主要记…

spring boot启动报错:so that it conforms to the canonical names requirements

springboot 2.x的版本中对配置文件中的命名规范有了强制性的要求&#xff0c;如下图所示中的dataSource属性属于驼峰格式&#xff0c;但是在springboot 2.x中不允许使用驼峰形式。 根据错误提示可知将其使用 - 来分割即可 错误信息的含义&#xff1a;“Canonical names should…

MySQL的msi版本9.0在安装过程总结和需要注意的地方

下载 参考文档 [官方包快速下载]&#xff08;https://dev.mysql.com/downloads/mysql/&#xff09; 使用zip文件安装可参考&#xff0c;这种直接把zip安装包解压到想要放的地方&#xff0c;并安装其中的方式一步步修改数据地址等配置即可。 个人使用了msi的安装文件 msi版本…