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.xdnf.cn/news/1543392.html

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

相关文章

【C语言从不挂科到高绩点】21-指针03-指针与函数【重点知识】

Hello!彦祖们,俺又回来了!!!,继续给大家分享 《C语言从不挂科到高绩点》课程!! 本节将为大家讲解C语言中非常重要的知识点-指针: 本套课程将会从0基础讲解C语言核心技术,适合人群: 大学中开设了C语言课程的同学想要专升本或者考研的同学想要考计算机等级证书的同学想…

死磕P7: JVM内存划分必知必会(一)

这是「死磕P7」系列第 001 篇文章&#xff0c;欢迎大家来跟我一起 死磕 100 天&#xff0c;争取在 2025 年来临之际&#xff0c;给自己一个交代。 JVM 内存区域划分是面试常考点&#xff0c;属于死记硬背型&#xff0c;比较让人头大的是不同版本的 JDK 具有不同的划分方式&…

Shopee虾皮双十大促:广告到底怎么做?需要使用动态代理吗?

在Shopee虾皮下半年的大促活动中&#xff0c;即将到来的10.10超级品牌节就是下半年各个超级购物节的其中一个&#xff0c;抓住本次大促的机会&#xff0c;卖家就有机会在更短的决策时间内实现更高的转化。大促期间最重要的环节之一就是广告投放&#xff0c;而广告投放又有什么技…

公司电脑监控都监控什么?可以看到员工摸鱼吗?电脑监控功能全解析!【2024年必看】

在这个数字化时代&#xff0c;企业对于信息安全和工作效率的追求日益增强。 公司业务规模的扩大&#xff0c;员工数量激增&#xff0c;如何有效管理员工行为、保障企业信息安全成为了每个管理者必须面对的重要课题。 于是&#xff0c;公司电脑监控成为了许多企业的选择&#…

全方位洗衣洗鞋小程序系统,重塑干洗店服务新体验;

全方位洗衣洗鞋小程序系统&#xff0c;重塑干洗店服务新体验; 一、核心功能革新&#xff1a; 1.多元化下单模式&#xff1a;融合上门取送、到店服务、寄存网点及智能衣柜四种便捷方式&#xff0c;用户轻松一键下单&#xff0c;享受个性化服务。 2.从下单到送回&#xff0c;全程…

从零开始讲DDR(3)——DDRC与DDRPYH

一、DDR的使用 在之前的文章中我们介绍了DDR的基本概念&#xff0c;但是DDR内存的操作不仅仅是简单的数据读取和写入&#xff0c;它包括许多时序要求和信号调度。为了让DDR内存有效运作&#xff0c;系统需要在逻辑层和物理层之间进行大量的协作。我们拿出一张DDR的操作简化状态…

YOLOv8改进,YOLOv8 Neck结构引入BiFPN

摘要 模型效率在计算机视觉中变得越来越重要。本文系统地研究了神经网络架构设计选择用于目标检测,并提出了几项关键优化以提高效率。首先,提出了一种加权双向特征金字塔网络(BiFPN),它允许轻松快速的多尺度特征融合;其次,提出了一种复合缩放方法,该方法同时均匀地缩放…

数通。。。

通信&#xff1a;需要介质才能通信电话离信号塔&#xff08;基站&#xff09;越远&#xff0c;信号越弱。信号在基站之间传递。你离路由器越远&#xff0c;信号越差。一个意思 比如想传一张图片&#xff0c;这张图片就是数据载荷 网关&#xff0c;分割两个网络。路由器可以是网…

对接空号检测平台可以降低成本吗

空号检测主要关注的是电话号码的状态&#xff0c;如是否为空号、停机、关机等&#xff0c;它并不直接针对语音助手进行拦截。 呼叫中心系统对接空号检测确实可以在一定程度上降低成本&#xff0c;主要体现在以下几个方面&#xff1a; 1.提高接通率&#xff1a;空号检测能够剔除…

一文搞懂MES与MOM系统的区别

随着制造业信息化的不断发展&#xff0c;越来越多的企业开始引入信息化系统来提升生产效率与管理能力。在众多系统中&#xff0c;制造执行系统&#xff08;MES&#xff09;与制造运营管理&#xff08;MOM&#xff09;是最常见且重要的两种系统。然而&#xff0c;许多人对这两者…

增强现实系列—Diffusion Time-step Curriculum for One Image to 3D Generation

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

C++笔记---set和map

1. 序列式容器与关联式容器 前面我们已经接触过STL中的部分容器如&#xff1a;string、vector、list、deque、array、forward_list等&#xff0c;这些容器统称为序列式容器&#xff0c;因为逻辑结构为线性序列的数据结构&#xff0c;两个位置存储的值之间一般没有紧密的关联关…

灾难级漏洞:阿里云盘可看别人隐私照?2亿用户或面临隐私泄露隐患

此次事件将阿里云盘的数据安全问题推至风口浪尖&#xff0c;对其品牌信誉和市场地位构成严峻挑战。 转载&#xff1a;科技新知 原创 作者丨江蓠 编辑丨蕨影 阿里云盘惊现灾难级别bug&#xff01; 9月14日晚&#xff0c;多名网友爆料称&#xff0c;可以在阿里云盘的相册中看到其…

三线城市的女玩家们不想“谈恋爱”,小游戏掘金新蓝海

女性玩家的游戏选项只有乙游吗&#xff1f; 在7月举办的微信小游戏开发者大会上&#xff0c;微信小游戏团队公布了一系列最新运营数据。数据显示&#xff0c;微信小游戏的用户规模已突破十亿大关。从用户画像来看&#xff0c;其年龄层主要集中在24至40岁之间&#xff0c;且三线…

一文读懂HPA弹性扩展自定义指标和缩放策略

一文读懂HPA弹性扩展自定义指标和缩放策略 目录 1 概念 1.1 什么是HPA1.2 HPA 的自定义指标&#xff08;Custom Metrics&#xff09;与扩展1.3 基于多指标的 HPA 1.3.1 工作原理1.3.2 例子&#xff1a;基于 CPU、内存和 QPS 的 HPA 配置 1.4 HPA 的扩缩容行为&#xff08;Beh…

集合根据上下级关系转树结构

1、创建实体对象 public class TreeNode {private String id;private String pid;private String name;private List<TreeNode> children;public TreeNode(String id,String pid,String name){this.id id;this.pid pid;this.name name;}public String getId() {retur…

VBA日历进度

hi&#xff0c;大家好&#xff01; 经过两次台风的洗礼之后&#xff0c;我们这里终于开始降温了&#xff0c;终于感觉到秋天的存在了&#xff01;时间也在一天天的过去&#xff0c;马上要十一假期了&#xff0c;十一过了&#xff0c;就可以算着过年了&#xff0c;让今天就让我…

OpenAI o1的真正前世竟来自字节?ReFT技术超越传统的数学微调能力,让GPT实现进化

导语&#xff1a; 随着ChatGPT-o1的发布&#xff0c;大型语言模型在复杂推理上取得进展&#xff0c;但传统监督式微调&#xff08;SFT&#xff09;仍存在局限。字节跳动研究院提出的增强微调&#xff08;ReFT&#xff09;技术结合了SFT和PPO算法&#xff0c;旨在提升模型泛化能…

HCIP考试范围包含哪些内容?HCIP备考指南分享

在数字化浪潮汹涌的今天&#xff0c;网络技术已成为支撑现代社会高效运转的不可或缺之力。Huawei Certified ICT Professional(HCIP)认证&#xff0c;作为这一领域中的精英标识&#xff0c;正吸引着无数技术爱好者的目光。那么&#xff0c;那么要考取这一认证需要掌握哪些考试内…