自定义 RouterLink 组件 v-slot custom

news/2024/11/28 22:10:17/

高级自定义:通过 v-slot 使用插槽 API
如果你需要更复杂的自定义逻辑或更加灵活的渲染,可以结合 v-slot 来实现:

<template><router-link :to="to" custom v-slot="{ navigate }"><div @click="navigate" class="custom-link"><slot></slot> <!-- 插槽内容 --></div></router-link>
</template><script>javascript">
export default {name: 'CustomRouterLink',props: {to: {type: [String, Object],required: true,},},
};
</script><style scoped>
.custom-link {cursor: pointer;color: blue;text-decoration: none;
}
.custom-link:hover {text-decoration: underline;
}
</style>

代码解释:
custom 和 v-slot:

custom 属性告诉 router-link 使用自定义插槽而不是默认的 标签。
v-slot=“{ navigate }” 提供了一个 navigate 函数,你可以通过它来控制点击时的路由导航。

使用一个

元素包裹内容,并通过 @click=“navigate” 处理点击事件,从而触发路由跳转。
插槽内容:

使用插槽来渲染传入的内容,这样父组件可以灵活地控制插槽内的内容。

总结:
自定义 RouterLink 组件非常有用,可以根据需要完全控制路由链接的外观和行为。你可以通过:

使用 router-link 的 custom 属性与 v-slot 实现高度自定义。
通过插槽提供灵活的内容渲染方式。
控制点击事件,执行额外的自定义逻辑。
这种方式使得你能够在 Vue Router 中处理更复杂的路由导航场景,比如自定义按钮、动画、图标等元素。

完整示例:

<!-- CustomRouterLink.vue -->
<template><router-link :to="to" custom v-slot="{ navigate, isActive, isExactActive }"><!-- 自定义按钮 --><button :class="['custom-link', { active: isActive, exact: isExactActive }]"@click="navigate"><slot></slot> <!-- 插槽内容,允许用户传入自定义的按钮文字或图标 --></button></router-link>
</template><script>javascript">
export default {name: 'CustomRouterLink',props: {to: {type: [String, Object],required: true,},},
};
</script><style scoped>
.custom-link {background-color: #007bff;color: white;padding: 10px 20px;border: none;border-radius: 4px;cursor: pointer;text-transform: uppercase;font-size: 14px;transition: background-color 0.3s;
}.custom-link:hover {background-color: #0056b3;
}.custom-link.active {background-color: #28a745;
}.custom-link.exact {font-weight: bold;
}
</style>

custom 属性:启用了 router-link 的自定义插槽,允许我们替换默认的 <a> 标签,提供完全自定义的渲染内容。
v-slot=“{ navigate, isActive, isExactActive }”:解构出了插槽的属性,navigate 用来触发路由跳转,isActive 和 isExactActive 分别表示该链接是否为活动状态或精确匹配状态。
插槽:<slot></slot> 允许父组件传入内容,这样我们可以动态渲染按钮的文本或图标。
@click="navigate":点击按钮时,调用 navigate 方法进行路由跳转。
样式:为自定义按钮添加了基本的样式,并根据是否激活(isActive)或精确匹配(isExactActive)来动态更改按钮的颜色和样式。

使用 CustomRouterLink 组件

<!-- ParentComponent.vue -->
<template><div><!-- 使用自定义 RouterLink 组件 --><CustomRouterLink to="/home">Go to Home</CustomRouterLink><CustomRouterLink to="/about">Go to About</CustomRouterLink><CustomRouterLink to="/contact">Contact Us</CustomRouterLink></div>
</template><script>javascript">
import CustomRouterLink from './CustomRouterLink.vue';export default {components: {CustomRouterLink,},
};
</script>

插槽:我们通过插槽传入了按钮的文本内容,例如 “Go to Home”、“Go to About” 等,允许每个链接自定义显示的文本。

按钮的样式会根据当前路由的状态动态变化。如果当前路由是该按钮的目标路径,它会显示为 active 状态,且如果路径完全匹配,还会显示为 exact 状态。

这个示例展示了如何使用 Vue Router 的 router-link 的 custom 属性和 v-slot 来实现高度自定义的路由导航组件。通过 v-slot,我们可以访问到 navigate 函数来控制导航,并可以根据路由的活动状态来动态改变按钮的样式。这种方法非常灵活,允许你根据需求创建任何形式的自定义链接组件。


http://www.ppmy.cn/news/1550739.html

相关文章

NVR小程序接入平台EasyNVR多品牌NVR管理工具:高效管理分散视频资源的解决方案

在当今数字化、智能化的时代背景下&#xff0c;视频监控已成为各行各业不可或缺的一部分&#xff0c;从公共安全到企业运维&#xff0c;再到智慧城市建设&#xff0c;视频资源的管理与应用正面临着前所未有的挑战。如何高效整合、管理这些遍布各地的分散视频资源&#xff0c;成…

第四十篇 DDP模型并行

摘要 分布式数据并行(DDP)技术是深度学习领域中的一项重要技术,它通过将数据和计算任务分布在多个计算节点上,实现了大规模模型的并行训练。 DDP技术的基本原理是将数据和模型参数分割成多个部分,每个部分由一个计算节点负责处理。在训练过程中,每个节点独立计算梯度,…

LightGBM 库包介绍与实战

LightGBM 库包介绍与实战 一、简介 LightGBM&#xff08;Light Gradient Boosting Machine&#xff09;是微软开发的一个高效、可扩展的梯度提升框架&#xff0c;广泛应用于分类、回归等任务。LightGBM 在处理大规模数据集时表现尤为突出&#xff0c;特别适用于特征维度高和样…

03-08、SpringCloud第八章,升级篇,负载均衡与服务调用Ribbon和OpenFeign

SpringCloud第八章&#xff0c;升级篇&#xff0c;负载均衡与服务调用Ribbon和OpenFeign 一、Ribbon 1、概述 SpringCloud Ribbon是给予NetFlex Ribbon 实现的一套客户端负载均衡工具。简单的说&#xff0c;主要功能是提供客户端的负载均衡算法和服务调用。Ribbon客户端组件…

使用 exe4j 将 Spring Boot 项目打包为 EXE 可执行文件

使用 exe4j 将 Spring Boot 项目打包为 EXE 可执行文件 文章目录 使用 exe4j 将 Spring Boot 项目打包为 EXE 可执行文件什么是 exe4j准备工作打包 Spring Boot 项目为 EXE 文件1.启动 exe4j2. 选择项目类型3. 配置项目名称和输出目录4. 配置项目类型或可执行文件名称5. java配…

《Unity Shader 入门精要》高级纹理

立方体纹理 图形学中&#xff0c;立方体纹理&#xff08;Cubemap&#xff09;是环境映射&#xff08;Environment Mapping&#xff09;的一种实现方法。环境映射可以模拟物体周围的环境&#xff0c;而使用了环境映射的物体可以看起来像镀了层金属一样反射出周围的环境。 对立…

5.1 MySQL 锁机制

锁机制是 MySQL 用于控制并发访问的重要手段&#xff0c;通过锁定资源避免数据冲突。理解 MySQL 的锁机制&#xff0c;有助于开发者优化数据库性能并处理高并发场景。 1. 锁的概念 锁&#xff08;Lock&#xff09;是数据库系统为保证数据一致性和完整性&#xff0c;对特定资源…

Python 中的装饰器是什么?

装饰器是Python中一种非常强大的功能&#xff0c;它允许你在不修改原始函数代码的前提下&#xff0c;增加额外的功能或改变函数的行为。 装饰器本质上是一个接受函数作为参数的函数&#xff0c;并返回一个新的函数。 通过装饰器&#xff0c;我们可以轻松地实现诸如日志记录、…