vue3的attr透传属性详解和使用法方式。以及在css样式的伪元素中实现
在 Vue 3 和 TypeScript 中,属性透传(attr pass-through)是指将组件的属性传递到其根元素或某个子元素中。这个概念在开发可复用的组件时非常有用,尤其是当你希望将父组件的属性动态地传递给子组件的某个 DOM 元素时。
在 Vue 3 中,透传属性通常使用 v-bind="$attrs"
结合 v-on="$listeners"
来实现。对于 CSS 样式中的伪元素,你可以通过 ::before
、::after
等伪元素来实现样式效果。
下面我将详细解释 Vue 3 中如何实现属性透传以及如何在 CSS 样式的伪元素中使用。
1. Vue 3 属性透传 (Attribute Pass-Through)
基本概念
在 Vue 中,$attrs
是一个包含父组件传递给子组件的所有属性的对象(不包括 class
和 style
)。这些属性可以通过 v-bind="$attrs"
来透传到子组件的根元素或某个特定元素。
$listeners
(在 Vue 2 中称为 $on
)用于监听父组件传递的事件,也可以通过 v-on="$listeners"
传递给子组件的元素。
例子:属性透传
假设你有一个 Button
组件,想要让父组件传递任何属性给 button
元素,比如 type
或 disabled
。
Button.vue(子组件)
<template><!-- 使用 $attrs 将所有传递给该组件的属性透传到 button 元素 --><button v-bind="$attrs" v-on="$listeners"><slot></slot></button>
</template><script lang="ts">
import { defineComponent } from 'vue';export default defineComponent({name: 'Button',// 此处我们可以定义 props,$attrs 会包括除了 props 之外的所有传递的属性props: {label: {type: String,required: true,}}
});
</script>
Parent.vue(父组件)
<template><!-- 父组件传递属性到 Button 组件 --><Button type="submit" disabled>Submit</Button>
</template><script lang="ts">
import { defineComponent } from 'vue';
import Button from './Button.vue';export default defineComponent({components: {Button,}
});
</script>
在这个例子中,Button
组件接收到的 type="submit"
和 disabled
属性会被透传到最终的 <button>
元素上。
注意事项
$attrs
只包含父组件传递给子组件的属性(不包括class
和style
,这些属性会被自动透传)。- 如果组件定义了自己的
props
,传递给子组件的属性不会自动作为props
接收,必须显式通过v-bind="$attrs"
传递。
2. 在 CSS 伪元素中实现属性透传
CSS 伪元素(如 ::before
和 ::after
)允许我们为元素添加样式和内容。我们可以通过 Vue 组件的 style
或 class
来间接影响伪元素的样式。
基本的伪元素使用
假设我们要为一个按钮添加文本前缀或后缀,通过 CSS 伪元素来实现:
Button.vue(子组件)
<template><button class="button" v-bind="$attrs"><slot></slot></button>
</template><style scoped>
.button {position: relative;padding-left: 20px;
}.button::before {content: attr(data-prefix);position: absolute;left: 0;top: 50%;transform: translateY(-50%);
}.button::after {content: attr(data-suffix);position: absolute;right: 0;top: 50%;transform: translateY(-50%);
}
</style><script lang="ts">
import { defineComponent } from 'vue';export default defineComponent({name: 'Button',props: {label: String,}
});
</script>
在这个例子中,我们使用了 CSS ::before
和 ::after
来实现伪元素,并通过 data-*
属性将父组件传递的数据用于伪元素内容。
Parent.vue(父组件)
<template><!-- 在父组件中,我们通过自定义属性传递值 --><Button data-prefix="Start" data-suffix="End" label="Click Me">Button</Button>
</template><script lang="ts">
import { defineComponent } from 'vue';
import Button from './Button.vue';export default defineComponent({components: {Button,}
});
</script>
解释
- 在
Button.vue
中,::before
和::after
伪元素通过content: attr(data-prefix)
和content: attr(data-suffix)
读取传递的自定义属性 (data-prefix
和data-suffix
)。 - 在
Parent.vue
中,父组件传递了data-prefix
和data-suffix
属性,它们将会影响按钮的伪元素内容。
结合 v-bind
和 ::before
、::after
你还可以通过 v-bind="$attrs"
将属性传递给根元素,从而在根元素上动态地设置样式或其他属性。这可以进一步影响伪元素的样式。
<template><button class="button" v-bind="$attrs"><slot></slot></button>
</template><style scoped>
.button {position: relative;
}.button::before {content: attr(data-content);position: absolute;left: 0;top: 50%;transform: translateY(-50%);
}
</style><script lang="ts">
import { defineComponent } from 'vue';export default defineComponent({name: 'Button',props: {label: String,}
});
</script>
父组件传递 data-content
:
<template><Button data-content="Hello World!">Click Me</Button>
</template>
总结
- 属性透传:使用
v-bind="$attrs"
和v-on="$listeners"
实现将父组件的属性和事件传递给子组件的 DOM 元素。 - 伪元素使用:CSS 伪元素(如
::before
和::after
)可用attr()
函数从元素的属性(如data-*
属性)中提取内容并显示在页面上。
相关文章:
vue3的attr透传属性详解和使用法方式。以及在css样式的伪元素中实现
在 Vue 3 和 TypeScript 中,属性透传(attr pass-through)是指将组件的属性传递到其根元素或某个子元素中。这个概念在开发可复用的组件时非常有用,尤其是当你希望将父组件的属性动态地传递给子组件的某个 DOM 元素时。 在 Vue 3 …...
【仿真建模-MESA】框架简介
1. 简介 Mesa是一个基于Python3的开源项目,旨在提供一个现代、易用的多智能体仿真环境。它借鉴了NetLogo、Repast和MASON等多智能体仿真框架的优点,并结合Python语言的强大功能,为用户提供了丰富的建模和仿真工具。 《官方文档》 2. 核心组件…...

Linux环境基础开发工具的使用(yum、vim、gcc、g++、gdb、make/Makefile)
目录 Linux软件包管理器 - yum Linux下安装软件包的方式 认识yum 查找软件包 安装软件 如何实现本地机器和云服务器之间的文件互传 卸载软件 Linux编辑器 - vim vim的基本概念 vim下各模式的切换 批量化注释 vim的简单配置 Linux编译器 - gcc/g gcc/g的作用 gcc/g语…...

VSCode 间距太小
setting->font family 使用:Consolas, Courier New, monospace 字体...

【K8S系列】imagePullSecrets配置正确,但docker pull仍然失败,进一步排查详细步骤
如果 imagePullSecrets 配置正确,但在执行 docker pull 命令时仍然失败,可能存在以下几种原因。以下是详细的排查步骤和解决方案。 1. 检查 Docker 登录凭证 确保你使用的是与 imagePullSecrets 中相同的凭证进行 Docker 登录: 1.1 直接登录 在命令行中,执行以下命令: …...

【ARM Coresight OpenOCD 系列 5.1 -- OpenOCD 无法识别CPUID 问题: xxx is unrecognized】
请阅读【嵌入式开发学习必备专栏】 文章目录 OpenOCD 无法识别CPUID 问题ARM CPUIDCPUID 特性CPUID 寄存器字段OpenOCD 无法识别CPUID 问题 在使用OpenOCD 进行CPU debug的过程中有时会报出 无法识别CPUID的问题,本文将会介绍如何解决这个问题。首先我们来学习下什么是CPUID,…...

如何实现点击目录跳转到指定位置?【vue】
需求:实现目录点击跳转到指定位置,点击后直接定位到指定模块 效果: 实现方法: (1)a标签跳转 普通使用: <!DOCTYPE html> <html><head><title>a-Demo</title>&l…...
SQL 通配符
SQL 通配符 在SQL中,通配符是一种特殊字符,用于在LIKE子句中搜索数据。它们主要用于模式匹配,允许你搜索符合特定模式的值。SQL中的通配符通常用于SELECT、UPDATE和DELETE语句中,以增加查询的灵活性。本文将详细介绍SQL中常用的通…...

ubuntu显示管理器_显示导航栏
ubuntu文件管理器_显示导航栏 一、原始状态: 二、显示导航栏状态: 三、原始状态--->导航栏状态: 1、打开dconf编辑器,直接在搜索栏搜索 dconf-editor ------如果没有安装,直接按流程安装即可。 2、进入目录:org …...
黑芝麻嵌入式面试题及参考答案
请详细描述二叉树的深度优先搜索(dfs)流程。 深度优先搜索是一种用于遍历二叉树的重要算法,主要有先序遍历、中序遍历和后序遍历三种方式。 先序遍历的流程是,首先访问根节点,然后递归地遍历左子树,最后递归地遍历右子树。这就好比是在探索一个家族树,先拜访家族中的长辈…...

使用 PyTorch-BigGraph 构建和部署大规模图嵌入的完整教程
当涉及到图数据时,复杂性是不可避免的。无论是社交网络中的庞大互联关系、像 Freebase 这样的知识图谱,还是推荐引擎中海量的数据量,处理如此规模的图数据都充满挑战。 尤其是当目标是生成能够准确捕捉这些关系本质的嵌入表示时,…...
系统性能优化方法论详解:从理解系统到验证迭代
在当今的企业级和云计算环境中,系统性能优化已成为提升竞争力的关键因素。本文将对系统优化的步骤进行深入解析,帮助读者系统化地进行性能优化,从而显著提升系统的整体表现。 流程概述: 系统性能优化的流程可以分为以下几个关键步骤&#x…...

使用Tengine 对负载均衡进行状态检查(day028)
本篇文章对于在服务器已经安装了nginx,但却希望使用Tengine 的状态检查或其他功能时使用,不需要卸载服务器上的nginx,思路是使用干净服务器(未安装过nginx)通过编译安装Tengine,通过对./configure的配置,保证安装Tengi…...

网站推广实战案例:杭州翔胜科技有限公司如何为中小企业打开市场大门
以下是以杭州翔胜科技有限公司为例,解析其如何通过网站推广为中小企业打开市场大门的实战案例: 一、一站式网站推广方案 杭州翔胜科技有限公司提供一站式网站推广方案,该方案整合了多种推广手段,如搜索引擎优化(SEO&a…...

视频修复技术和实时在线处理
什么是视频修复? 视频修复技术的目标是填补视频中的缺失部分,使视频内容连贯合理。这项技术在对象移除、视频修复和视频补全等领域有着广泛的应用。传统方法通常需要处理整个视频,导致处理速度慢,难以满足实时处理的需求。 技术发…...

文心一言 VS 讯飞星火 VS chatgpt (396)-- 算法导论25.2 1题
一、在图 25-2 所示的带权重的有向图上运行 Floyd-Warshall 算法,给出外层循环的每一次迭代所生成的矩阵 D ( k ) D^{(k)} D(k) 。如果要写代码,请用go语言。 文心一言: 好的,让我们一步步分析在带权重的有向图上运行 Floyd-Wa…...

如何使用本地大模型做数据分析
工具:interpreter --local 样本数据: 1、启动分析工具 2、显示数据文件内容 输入: 显示/Users/wxl/work/example_label.csv 输出:(每次输出的结果可能会不一样) 3、相关性分析 输入: 分析客户类型与成…...

【Nginx从入门到精通】04-安装部署-使用XShell给虚拟机配置静态ip
文章目录 总结1、XShell :方便管理多台机器2、配置ip文件:区分大小写 一、查看上网模式二、Centos 7 设置静态ipStage 1 :登录root账号Stage 2 :设置静态ip : 修改配置文件 <font colororange>ifcfg-ens33Stage 2-1…...
C# 面向对象的接口
接口,多态性,密封类 C# 接口 遥控器是观众和电视之间的接口。 它是此电子设备的接口。 外交礼仪指导外交领域的所有活动。 道路规则是驾车者,骑自行车者和行人必须遵守的规则。 编程中的接口类似于前面的示例。 接口是: APIsC…...

使用IDEA+Maven实现MapReduced的WordCount
使用IDEAMaven实现MapReduce 准备工作 在桌面创建文件wordfile1.txt I love Spark I love Hadoop在桌面创建文件wordfile2.txt Hadoop is good Spark is fast上传文件到Hadoop # 启动Hadoop cd /usr/local/hadoop ./sbin/start-dfs.sh # 删除HDFS的hadoop对应的input和out…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...

手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...

如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...