自定义 RouterLink 组件 v-slot custom

devtools/2024/11/27 21:49:13/

高级自定义:通过 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/devtools/137490.html

相关文章

【git】取消一个已提交的文件或路径的追踪

在 Git 中&#xff0c;如果想取消对一个已提交的文件或路径的追踪&#xff0c;有几种方法可以实现这一点&#xff0c;具体取决于实际场景。以下是几种常见的方法&#xff1a; 1. 从索引中移除文件&#xff08;暂存区&#xff09; 如果只是希望取消对某个文件的追踪&#xff0…

极狐GitLab 17.6 正式发布几十项与 DevSecOps 相关的功能【一】

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料&#xff1a; 极狐GitLab 官网极狐…

VirtIO实现原理之数据结构与数据传输演示(2)

接前一篇文章:VirtIO实现原理之数据结构与数据传输演示(1) 本文内容参考: VirtIO实现原理——vring数据结构-CSDN博客 VirtIO实现原理——数据传输演示-CSDN博客 特此致谢! 一、数据结构总览 2. 相关数据结构 上一回读了《Virtual I/O Device (VIRTIO) Version 1.3》…

Cesium教程03_加载b3dm高度

使用 Vue3 和 Cesium 构建三维地球场景并实现高度调整功能 引言 在现代 Web GIS&#xff08;地理信息系统&#xff09;开发中&#xff0c;Cesium 是一款功能强大的三维地球可视化工具。本文展示了如何使用 Vue3 与 Cesium 集成&#xff0c;实现一个支持调整高度功能的三维地球…

OSPF路由状态数据库、type 类型、完整的LSA

【OSPF】 1.Lsdb&#xff1a;链路状态数据库【存放多条LSA——链路状态通告信息】 2..Dis ospf lsdb : 查看设备LSDB. 3.Ospf process__ with router ID __ &#xff1a; ospf的进程为___router_id为 ____. 4.Lsdb&#xff1a;链路状态数据库【存放多条…

R和Julia免疫细胞映射到组织切片

将免疫细胞映射到组织切片是一种整合多种技术的高精度方法&#xff0c;用于揭示细胞在组织微环境中的空间分布。通过使用如空间转录组学、免疫荧光染色或单细胞RNA测序等技术&#xff0c;科学家可以精确定位特定免疫细胞类型&#xff0c;并分析它们与组织结构或病理学变化的关联…

【MCU】微控制器的编程技术:ISP 与 IAP

在嵌入式领域中&#xff0c;将程序下载到内置 Flash 有两种技术 ISP (In-system programming) ISP 即在系统编程&#xff0c;是指一些可编程逻辑器件、微控制器、芯片组和其他嵌入式设备在安装到完整嵌入式系统后能够进行编程&#xff0c;而不需要在将芯片安装到系统中之前对…

修改Android Studio项目配置JDK路径和项目Gradle路径的GUI工具

概述 本工具提供了一个基于Python Tkinter的图形用户界面&#xff08;GUI&#xff09;&#xff0c;用于帮助用户搜索并更新Android Studio项目中的config.properties文件里的java.home路径&#xff0c;以及workspace.xml文件中的last_opened_file_path路径。该工具旨在简化手动…