vue系列==vue路由

目录

1、路由的核心功能

2、配置简单路由

3、路由链接高亮显示

3.1 利用vue-router模块的内置样式实现路由链接高亮显示

3.2 利用active-class属性实现路由链接高亮显示

3.3利用vue-router模块的linkActiveClass全局配置实现路由链接高亮显示

3.4利用router-link的slot实现自定义标签与高亮显示

4、路由嵌套

5、动态路由传参

5.1params传递参数

5.2query参数

6、路由参数映射

6.1拆分路由配置代码

7命名路由切换

8、命名视图渲染

8.1命名视图的基本应用

8.2嵌套路由中命名视图的应用

9、编程式路由导航

10、开发注意事项

useRouter

useRoute

11、路由过滤筛选

12、路由过渡动画效果

13、路由的异步懒加载


1、路由的核心功能

1、首先需要在Vue主体项目中安装与配置VueRouter路由插件,构建出基础的路由切换与路由渲染,然后在此基础上不断扩展与强化路由功能。

2、● 动态组件加载。● 配置简单路由。● 路由链接高亮显示。● 嵌套路由。● 动态路由传参。● 路由参数映射。● 命名路由切换。● 命名视图渲染。● 编程式路由导航。● 路由过滤筛选。● 路由过渡动画效果。● 路由滚动行为。● 路由的异步懒加载。● 缓存路由组件。● 路由守卫。● 动态添加与删除路由

3、比如,对于两个页面之间的数据传递、设置嵌套页面等常见操作,利用动态组件加载是不容易处理的。也正是因为这些局限,才需要利用VueRouter插件来实现更好的页面切换和维护操作。

//定义状态刷新
const selectPage = ref(null)   //设置选中组件ref对象//页面切换方法
const changePage = (page) => {selectPage.value = page
}//初始化页面
changePage(Home)</script><template>
<!--  切换页面按钮--><button @click="changePage(HelloWorld)">Hello World</button><button @click="changePage(Home)">Home</button><button @click="changePage(User)">User</button>
<!--  //利用动态组件渲染选中页面--><component :is="selectPage"></component>
</template>

2、配置简单路由

1、加载不能实现的。在使用路由功能之前,我们需要明确,Vue本身并不包含路由功能。想要使用路由功能,则要通过官方的Vue插件VueRouter来实现。在正式使用路由功能之前,我们需要做的准备工作就是安装VueRouter插件包。

2、进行项目的路由操作之前,必须先创建静态路由表,并给路由页面逐个分配地址

3、

在main.js文件中配置

import App from './App.vue'// 引入路由组件
import Home from '@/views/Home.vue'
import User from '@/views/User.vue'
import { createRouter, createWebHashHistory } from 'vue-router'
// 配置路由表
const routes = [{ path: '/', component: Home },{ path: '/user', component: User }
]//构建路由器对象
const router = createRouter({history: createWebHashHistory(),routes
})
//将路由器对象注入到Vue实例中
createApp(App).use(router).mount('#app')

在app.vue中进行配置

<template>
<!--  利用router-link渲染页面链接--><router-link to="/">首页</router-link><router-link to="/user">用户页面</router-link><hr>
<!--  利用路由视图渲染页面--><router-view></router-view></template>

3、路由链接高亮显示

3.1 利用vue-router模块的内置样式实现路由链接高亮显示

1、router-link-active的意思是链接激活状态,vue-router内置完成了激活状态的判断和样式类的设置操作,开发人员可以直接设置router-link-active对应的样式

2、

<style scoped>/* 这里可以写一些全局的样式 */.router-link-active {color: Red;}</style>

3.2 利用active-class属性实现路由链接高亮显示

3.3利用vue-router模块的linkActiveClass全局配置实现路由链接高亮显示

3.4利用router-link的slot实现自定义标签与高亮显示

1、但是router-link默认渲染的标签目标是a,如果想渲染button按钮又应该如何处理呢?毕竟在实际开发的布局控制中,想要放置的不一定是a标签,也可能是button、div、span、p等其他的任意标签,同时希望通过点击这些标签实现页面切换。

2、在router-link上可以设置custom属性来控制路由链接内容是否被包裹在a元素内,还可以利用v-slot传递一个对象,这个对象中可以包含href(链接地址)​、route(当前路由对象)​、navigate(导航函数)​、isActive(是否激活)​、isExactActive(是否精确激活)等不同的参数。在下面的讲解中仅传递了navigate与isActive两个参数

3、在Vue Router中,<router-link>组件默认渲染为一个<a>标签,但有时你可能需要将其渲染为其他类型的标签,如<button>。为了实现这一点,Vue Router允许你使用v-slotcustom属性来自定义渲染内容。

4、

//这个按钮就不会显示出a链接了  
<div style="display: flex;"><router-link to="/user" style="margin-right: 10px">首页</router-link><router-link to="/" custom v-slot="{ isActive ,navigate }"><button @click="navigate" :class="{ active: isActive }" >首页内容</button></router-link><router-link to="/" ><span style="color: red;">首页内容</span></router-link></div>

5、

  1. v-slot="{ navigate, isActive }":这个指令允许你访问<router-link>的内部插槽属性。在这个例子中,我们只使用了navigate(用于触发导航的函数)和isActive(一个布尔值,表示链接是否处于活跃状态)。

  2. custom:这个属性告诉<router-link>不要渲染默认的<a>标签,而是使用插槽内容。

  3. @click="navigate":这是一个事件监听器,它会在按钮被点击时调用navigate函数,从而触发路由导航。

  4. :class="{ 'active-class': isActive }":这是一个动态类绑定,它根据isActive的值来决定是否给按钮添加一个类(例如,active-class)。这样你就可以为活跃状态的路由链接应用不同的样式。

<router-link to="/user" v-slot="{ navigate, isActive }" custom><button :class="{ 'active-class': isActive }" @click="navigate">用户页面</button>
</router-link>

4、路由嵌套

1、因为用户模块存在嵌套,所以可以在Users的路由配置表中添加children属性。children属性值是一个数组类型的,主要用来明确用户模块将要嵌套的子路由。数组中的书写格式可以和简单路由配置操作模式的格式相同,然后利用这种模式添加路由对象内容,其中包括UserStart、UserDetail、UserEdit。此时各子路由相关信息如表5-3所示。

2、Vue Router 支持嵌套路由,允许您在应用程序中创建多层嵌套的组件结构。您可以通过定义嵌套路由并在组件中使用 <router-view> 来实现这一点。例如,您可以在 User 组件的模板内添加一个 <router-view>,然后在路由配置中定义 children 来指定子路由。这样,当访问特定的 URL 时,相应的子组件就会在 User 组件的 <router-view> 中渲染

3、

<template><div><!-- 用户页的面包屑导航 --><nav aria-label="breadcrumb"><ol class="breadcrumb"><li class="breadcrumb-item"><router-link to="/" class="text-decoration-none">首页</router-link></li><li class="breadcrumb-item active"><router-link to="/users" class="text-decoration-none">用户</router-link></li></ol></nav><!-- 用户列表以及用户查看、用户详情、编辑用户是左右两个独立的部分 --><div class="row"><!-- 用户列表 --><div class="col-3"><h1>用户列表</h1><div class="list-group"><router-linkto="/users/detail"class="list-group-item list-group-item-action">用户 1</router-link><router-linkto="/users/detail"class="list-group-item list-group-item-action">用户 2</router-link ></div></div><!-- 用户查看、用户详情、编辑用户 -->
<!--      因为是嵌套路由,所有在user底下的所有路由都会被渲染到这里,所以这里只需要渲染一个空的router-view,具体的路由渲染在这里--><router-view></router-view></div></div>
</template>
import { createRouter, createWebHashHistory } from 'vue-router'
// 配置路由表
const routes = [{ path: '/', component: Home },// 路由嵌套,在user下有三个子路由{path: '/users', component: User,children: [{ path: '', component: UserStart },{ path: 'detail', component: UserDetail },{ path: 'edit', component: UserEdit }]}
]//构建路由器对象
const router = createRouter({history: createWebHashHistory(),routes
})
//将路由器对象注入到Vue实例中
createApp(App).use(router).mount('#app')

5、动态路由传参

1、路由传参共有两种方式,分别是使用params参数传参和使用query参数传参。

2、路由传参共有两种方式,分别是使用params参数传参和使用query参数传参。

3、

5.1params传递参数

1、path修改为:id,其中冒号是占位符,用来确认当前是路由的params参数;id是用户自定义的参数名称,也可以是uid或者userId等任意名称。因此就可以归纳出,路由路径的最终形式为:xxx。

2、对to路由跳转目标属性进行动态数据的绑定,利用模板字符串进行动态拼接“/users/${id}”的设置。最终产生的路由跳转目标链接应该是类似/users/1、/users/2...的地址内容。

    <div class="row"><!-- 用户列表 --><div class="col-3"><h1>用户列表</h1><div class="list-group">
<!--          注意,这里to需要采用动态绑定的模式,否则会导致路由跳转失败,然后用反引号进行--><router-link v-for="id in ids" :key="id" :to="`/users/${id}`"   >用户{{id}}</router-link></div></div><!-- 用户查看、用户详情、编辑用户 -->
<!--      因为是嵌套路由,所有在user底下的所有路由都会被渲染到这里,所以这里只需要渲染一个空的router-view,具体的路由渲染在这里--><router-view></router-view>

4、接受参数

$route.params.id实现的。现在可以对vue-router模块的params参数做一个总结:设参在路由部分,传参在链接部分,接参和用参在组件部分。

<template><div><h1>用户详情</h1><!-- 接收路由的params参数,参数名称为id --><p>用户ID: {{ $route.params.id }}</p><router-link to="/users/edit" class="btn btn-primary">编辑用户</router-link><div>asdfasdfasdf</div><router-view></router-view></div>
</template>

5、其他方式使用路由

<router-link :to="{ name: 'User', params: { id: 123 }}">User 123</router-link>

6、接参数

在组件中使用    
<h2>{{$route.query.age}}</h2>在编程中使用
<script setup>import {useRoute} from "vue-router";
// 这是vue3中使用useRoute的例子,不能直接使用this.$route,而是使用useRoute()方法获取路由信息。let useRoute1 = useRoute();console.log(useRoute1.params.id);</script>

5.2query参数

1、现在可以对vue-router模块的参数做一个简单总结:它主要分成params与query两种参数类型,params参数的设参在路由部分,传参在链接部分,接参和用参在组件部分;query参数的设参和传参在链接部分,接参和用参在组件部分。

6、路由参数映射

1、使用函数的方式将params、query参数,以及自定义的静态常量对象属性进行映射时,在函数中需要书写一个参数,用于接收当前路由对象route。我们可以利用函数返回一个对象,在这个返回的内容中就可以使用route对象内容。而route中自然包含params和query参数,至于自定义的静态常量对象属性,我们依然可以为其设置固定值。

2、

// 配置路由表
const routes = [{ path: '/', component: Home },// 路由嵌套,在user下有三个子路由{path: '/users', name: 'users', component: User,children: [{ path: '', component: UserStart },{ path: ':id', component: UserDetail },{ path: ':id/edit', component: UserEdit ,// 函数类型组件,接收参数,包括params、query、hash、fullPath等属性props:(route) => ({id: route.params.id,staticClass: 'user-edit',// 动态路由参数name: route.query.name,age: route.query.age})}]}
]
<template><div><h1>编辑asdfasdfasf用户</h1><p>用户名:{{name}}</p><p>年龄:{{age}}</p><p>id:{{id}}</p><p>静态类:{{staticClass}}</p></div>
</template>
<script setup>import {useRoute} from "vue-router";
// 这是vue3中使用useRoute的例子,不能直接使用this.$route,而是使用useRoute()方法获取路由信息。let useRoute1 = useRoute();console.log(useRoute1.params.id);let props = defineProps(['name', 'age', 'id' ,'staticClass']);</script>

6.1拆分路由配置代码

1、一定要记得利用export default进行模块的暴露操作,否则之前设置的路由配置就会失效。

7命名路由切换

1、现在已经给编辑用户页的路由设置了name属性,那么也可以尝试将查看用户详情页的UserDetail组件中的router-link路由跳转从字符串拼接模式修改成对象模式,只需设置name、params、query参数即可

2\=

  <div><h1>用户详情</h1>
<!--     接收路由的params参数,参数名称为id --><p>用户ID: {{ $route.params.id }}</p>
<!--    <router-link :to="`/users/${$route.params.id}/edit?name=asfdas&age=18`" class="btn btn-primary">编辑用户</router-link>--><router-link :to="{name: 'UserEdit',params: {id: $route.params.id,},query: {name: 'asfdas',age: 18,},}" class="btn btn-primary">编辑用户</router-link>

8、命名视图渲染

8.1命名视图的基本应用

1、①component配置属性从单数变成复数,也就是components,这意味着其不再是一对一的简单关系。②components属性的类型从组件类型变成对象类型,并且对象中包含一个default对象属性内容,这个类型才是真正的组件类型,可以对应到原来component所对应的Home组件

2、固定在相关的页面中,只要关注好路由配置就可以了

// 配置路由表
const routes = [{ path: '/',components: {default: Home,// 命名视图,可以方便的切换到不同子视图"routerHeader": () => import('@/components/Header.vue'),"routerFooter": () => import('@/components/Footer.vue')}},// 路由嵌套,在user下有三个子路由
<template>
<!--  路由嵌套--><router-view name="routerHeader"></router-view><!--  利用路由视图渲染页面--><router-view></router-view><router-view name="routerFooter"></router-view></template>

8.2嵌套路由中命名视图的应用

1、嵌套路由也是一样,参照相同的方法就可以执行了的

9、编程式路由导航

1、如push(跳转)​、replace(替换)​、go(横跨历史)​、forward(前进)​、back(后退)等

2、

10、开发注意事项

1、在 Vue.js 应用中,特别是使用 Vue Router 时,useRoute 和 useRouter 是两个常用的组合式 API 函数,它们提供了不同的功能:

2、

useRouter

  • 定义useRouter 函数返回 Vue Router 实例,该实例是全局的,可以在应用中的任何组件内使用。
  • 用途:它提供了导航方法,如 pushreplacego 等,用于控制路由跳转

3、

useRoute

  • 定义useRoute 函数返回当前激活的路由对象,该对象是响应式的,包含当前路由的参数、查询参数、路径等。
  • 用途:它用于访问当前路由的信息,例如读取路径参数、查询字符串等

11、路由过滤筛选

1、我们可以使用自动重定义路由来实现,需要在配置路由时配置redirect选项来实现自动转向指定路由

2、可以设置404页面进行跳转

    // 404路由{path: '/404',name: '404',component: () => import('@/views/notFound/index.vue')},// 不匹配的任意路由转发请求都自动重定向404页面{path: '/:notFound(.*)',redirect: ()=>({name: '404'}),// redirect: '/404',// redirect: {name: '404'},// redirect: () => ({name: '404'}),},

12、路由过渡动画效果

13、路由的异步懒加载

1、当前首页、用户页、查看用户详情页、编辑用户页、头部与底部等组件内容都是在路由页面(router/index.js)中通过“import Xxx from'@/views/Xxx'”将对应模块内容进行静态引入的,此时就有一个弊端,即不管当前操作是否需要该模块内容,都需要将其引入。现在可以尝试利用“const Xxx=(​)=>import('@/views/Xxx')​”的模式进行动态模块引入,从而替换原来的静态模块引入操作。

2、上面就是静态加载和动态加载的区别


 

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

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

相关文章

服务器新建用户

文章目录 前言一、步骤二、问题三、赋予管理员权限总结 前言 环境&#xff1a; 一、步骤 创建用户需要管理员权限sudo sudo useradd tang为用户设置密码 sudo passwd tang设置密码后&#xff0c;可以尝试使用 su 切换到 tang 用户&#xff0c;确保该用户可以正常使用&#…

leetcode-88-合并两个有序数组

题解&#xff1a; 解法一&#xff1a;从后向前同时遍历两个数组&#xff0c;因为nums1后面是0&#xff0c;从后遍历节省空间。 1、定义三个指针&#xff0c;分别为&#xff1a;len1m-1指向nums1的最后一个非0数字&#xff1b;len2n-1指向nums2的最后一个数字&#xff1b;len3…

操作系统(10) (并发(2)------基于软件/硬件/操作系统层面解决两个进程之间的临界区问题/抢占式/非抢占式内核)

目录 1. 基于软件层面(Petersons Solution) Petersons Solution 满足三个要求: 好处: 缺点 2. 基于硬件层面 1. Disabling Interrupts (禁用中断) 概念解释&#xff1a; 代码框架&#xff1a; 要求&#xff1a; 禁用中断的好处与问题&#xff1a; 2. Test and Set Lock (…

Java | Leetcode Java题解之第526题优美的排列

题目&#xff1a; 题解&#xff1a; class Solution {public int countArrangement(int n) {int[] f new int[1 << n];f[0] 1;for (int mask 1; mask < (1 << n); mask) {int num Integer.bitCount(mask);for (int i 0; i < n; i) {if ((mask & (1…

2024年大厂AI大模型面试题精选与答案解析

前言 随着AI市场&#xff0c;人工智能的爆火&#xff0c;在接下来的金九银十招聘高峰期&#xff0c;各大科技巨头和国有企业将会对AGI人才的争夺展开一场大战&#xff0c;为求职市场注入了新的活力。 为了助力求职者在面试中展现最佳状态&#xff0c;深入理解行业巨头的选拔标…

智能网联汽车:人工智能与汽车行业的深度融合

内容概要 在这个快速发展的时代&#xff0c;智能网联汽车已经不再是科幻电影的专利&#xff0c;它正在悄然走进我们的日常生活。如今&#xff0c;人工智能&#xff08;AI&#xff09;技术与汽车行业的结合犹如一场科技盛宴&#xff0c;让我们看到了未来出行的新方向。通过自动…

AI大模型重塑软件开发:从代码自动生成到智能测试

随着AI技术的不断发展&#xff0c;AI大模型在软件开发领域的应用日益广泛。从代码自动生成到智能测试&#xff0c;AI大模型正在深刻改变着软件开发的各个环节&#xff0c;重塑着整个开发流程。本文将探讨AI大模型的定义、应用场景、优势以及挑战&#xff0c;并展望未来的发展趋…

【基础】os模块

前言 1、os是operation system&#xff08;操作系统&#xff09;的缩写&#xff1b;os模块就是python对操作系统操作接口的封装。os模块提供了多数操作系统的功能接口函数。&#xff08;OS模块提供了与操作系统进行交互的函数&#xff09; 2、操作系统属于Python的标准实用程…

算法学习027 c++蛇形三角形填充 二维数组常规应用 中小学算法思维学习 比赛算法题解 信奥算法解析

目录 C蛇形三角形填充 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、运行结果 五、考点分析 六、推荐资料 C蛇形三角形填充 一、题目要求 1、编程实现 输入一个正整数N&#xff0c;输出N行的蛇形数字三角形&#xff08;见输出样例&#xf…

[vulnhub]DC: 1

https://www.vulnhub.com/entry/dc-1,292/ 主机发现端口扫描 使用nmap扫描网段类存活主机 因为靶机是我最后添加的&#xff0c;所以靶机IP是156 nmap -sP 192.168.75.0/24 // Starting Nmap 7.93 ( https://nmap.org ) at 2024-09-28 12:48 CST Nmap scan rep…

PyQt5的安装与简介

目录 一、介绍 二、PyQt5的安装 1、安装PyQt5 2、安装Qt的工具包 三、配置Qt工具 1、配置Designer &#xff08;1)、打开pycharm&#xff0c;找到设置选项 &#xff08;2&#xff09;、找到工具-->外部工具 &#xff08;3&#xff09;、点击号&#xff0c;创建外部工…

「Qt Widget中文示例指南」如何实现窗口嵌入?

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写&#xff0c;所有平台无差别运行&#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今&#xff0c;Qt已被运用于超过70个行业、数千家企业&#xff0c;支持数百万设备及应用。 本文中的示例主要演…

clickhouse运维篇(三):生产环境一键生成配置并快速部署ck集群

前提条件&#xff1a;先了解集群搭建流程是什么样&#xff0c;需要改哪些配置&#xff0c;有哪些环境&#xff0c;这个文章目的是简化部署。 clickhouse运维篇&#xff08;一&#xff09;&#xff1a;docker-compose 快速部署clickhouse集群 clickhouse运维篇&#xff08;二&am…

【OpenGL】vs中glsl高亮显示插件

vs中glsl高亮显示插件 扩展搜索glsl安装

<项目代码>YOLOv8 猫狗识别<目标检测>

YOLOv8是一种单阶段&#xff08;one-stage&#xff09;检测算法&#xff0c;它将目标检测问题转化为一个回归问题&#xff0c;能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法&#xff08;如Faster R-CNN&#xff09;&#xff0c;YOLOv8具有更高的…

jmeter脚本-请求体设置变量and请求体太长的处理

目录 1、查询接口 1.1 准备组织列表的TXT文件&#xff0c;如下&#xff1a; 1.2 添加 CSV数据文件设置 &#xff0c;如下&#xff1a; 1.3 接口请求体设置变量&#xff0c;如下&#xff1a; 2、创建接口 2.1 见1.1 2.2 见1.2 2.3 准备创建接口的请求体TXT文件&#xff…

哔哩哔哩车机版2.7.0|专为司机打造的车机版B站,内容丰富,功能齐全

哔哩哔哩车机版是一款专为司机朋友们打造的车机版应用&#xff0c;扫码登录即可使用。该软件让你通过耳朵了解最新的游戏、动画动漫信息&#xff0c;感受其独特的趣味性内容。车机版亮点包括二次元和三次元的鬼畜视频、原创和翻唱音乐、前沿科技科普、国内外优秀舞蹈作品等。软…

在Mac下安装时间序列软件Hector

1.软件介绍 Hector 是一款开源软件&#xff0c;专用于 GNSS 时间序列数据的处理与分析&#xff0c;广泛应用于地球科学研究。它帮助研究人员从 GNSS 数据中提取长期趋势、周期性成分&#xff0c;并建模噪声特性&#xff0c;用于地壳形变、地震影响和气候变化等方面的研究。Hec…

opencv python笔记

OpenCV课程 OpenCV其实就是一堆C和C语言的源代码文件,这些源代码文件中实现了许多常用的计算机视觉算法。 OpenCV的全称是Open Source Computer Vision Library,是一个开放源代码的计算机视觉库OpenCV最初由英特尔公司发起并开发,以BSD许可证授权发行,可以在商业和研究领域中…

Rust 力扣 - 2461. 长度为 K 子数组中的最大和

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 我们遍历长度为k的窗口&#xff0c;用一个哈希表记录窗口内的所有元素&#xff08;用来对窗口内元素去重&#xff09;&#xff0c;我们取哈希表中元素数量等于k的窗口总和的最大值 题解代码 use std::collecti…