#attrs

news/2025/10/8 14:35:04/文章来源:https://www.cnblogs.com/BKYNEKO/p/19129621
在 Vue 中,$attrs是一个核心的实例属性,用于处理 ​​父组件传递给子组件的非 Prop 属性​​。以下是其核心特性、使用场景及版本差异的详细解析:

一、核心概念

  1. ​定义​$attrs是一个对象,包含父组件传递给子组件的 ​​所有非 Prop 属性​​(即未在子组件 props中声明的属性),例如 classstyledata-*等原生属性或自定义属性。 ​​例外​​:若子组件声明了某个属性为 prop,则父组件传递的同名属性不会出现在 $attrs中。
  2. ​默认行为​
    • Vue 会自动将父组件的非 Prop 属性绑定到子组件的 ​​根元素​​ 上(如 <div>)。
    • 若子组件需要将属性传递给内部元素(而非根元素),需通过 v-bind="$attrs"手动绑定。

二、使用场景

1. ​​透传属性​

当需要将父组件的属性传递给子组件内部的特定元素时:
<!-- 父组件 -->
<ChildComponent id="input" placeholder="请输入" /><!-- 子组件 ChildComponent.vue -->
<template><input v-bind="$attrs" />
</template>

2. ​​高阶组件(HOC)​

封装通用组件时,自动将未声明的属性透传到底层组件:
<!-- 高阶组件 Wrapper -->
<template><div class="wrapper"><slot v-bind="$attrs" /></div>
</template>

3. ​​跨层级通信​

在多层组件嵌套中,通过 $attrs逐层传递属性(无需显式声明 props):
<!-- 父组件 -->
<Parent :data="123" />
<!-- 子组件 -->
<Child v-bind="$attrs" />
<!-- 孙组件 -->
<GrandChild /> <!-- 自动接收 data=123 -->

三、版本差异

​特性​​Vue 2​​Vue 3​
​包含内容​ 仅非 Prop 属性(不含事件) 非 Prop 属性 + 事件监听器
​事件处理​ 需通过 $listeners 事件直接包含在 $attrs
class/style 不包含在 $attrs 包含在 $attrs
inheritAttrs 控制根元素是否自动继承属性 行为与 Vue 2 一致

四、关键配置

1. inheritAttrs: false

禁用默认的根元素属性继承,手动控制属性绑定位置:
<script>
export default {inheritAttrs: false, // 关闭自动绑定到根元素mounted() {console.log(this.$attrs); // 手动访问属性}
}
</script>

2. 事件监听(Vue 3)

在 Vue 3 中,事件监听器(如 @click)会作为 $attrs的键值对存在:
<!-- 父组件 -->
<Child @click="handleClick" /><!-- 子组件 -->
<template><button v-on="$attrs">Click Me</button>
</template>

五、实际案例

场景:自定义表单控件

封装一个支持原生属性的输入组件:
<!-- CustomInput.vue -->
<template><div><label>{{ label }}</label><input:value="modelValue"@input="$emit('update:modelValue', $event.target.value)"v-bind="$attrs" <!-- 透传所有非 Prop 属性 -->/></div>
</template><script setup>
defineProps(['modelValue', 'label']);
defineEmits(['update:modelValue']);
</script>
​使用方式​​:
<CustomInput v-model="username" type="text" placeholder="请输入用户名" data-testid="username-input"
/>
  • ​效果​​:typeplaceholderdata-testid等属性会自动应用到内部的 <input>元素。

六、注意事项

  1. ​避免滥用​$attrs应谨慎使用,过度依赖会导致组件行为不透明。建议仅在需要透传属性时使用。
  2. ​与 props的优先级​​ 若子组件声明了同名 prop,父组件传递的属性将优先绑定到 prop,而非 $attrs
  3. ​Vue 3 中的事件处理​​ 事件监听器需通过 v-on="$attrs"显式绑定,或通过 context.attrs访问。

七、总结

  • ​核心作用​​:实现非 Prop 属性的透传,简化高阶组件和跨层级通信。
  • ​最佳实践​​:结合 inheritAttrs: falsev-bind="$attrs",精准控制属性绑定位置。
  • ​版本适配​​:Vue 3 中 $attrs功能增强,需注意事件处理的变化。

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

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

相关文章

国庆比赛总结

没有摘要一些写在总结之前的话 感觉国庆这一段时间,真的是,疯狂挂分,每天感觉都在被完虐。然后也发现了很多不足吧,就是感觉自己其实大多数地方还是有很大问题的。 比赛 10/02 挂分最狠的一集 10/03 不会T2 10/04 …

记录第一个博客

工作几年了,才开始写博客,希望以后越来越好

PCIe扫盲——链路初始化与训练基础(二)

前面的文章中提到过,Ordered Sets分别有以下几种:TS1 and TS2 Ordered Set (TS1OS/TS2OS)、Electrical Idle Ordered Set (EIOS)、FTS Ordered Set (FTSOS)、SKP Ordered Set (SOS)和Electrical Idle Exit Ordered S…

2025 年 ppt 素材模板 /ppt 模板 ai 生成 /ppt 模板制作 /ppt 模版 / 课件 PPT 模板工具推荐:iSlide 技术优势与全场景服务能力解析

在数字化办公深入推进的当下,PPT 作为信息传递与展示的核心工具,其制作效率与设计质量直接影响工作成效。但多数职场人、教育工作者面临多重困境:缺乏专业设计能力导致成品粗糙,手动排版耗时耗力,模板素材版权不明…

课后作业1(01-方法)

一、请看以下代码,你发现了有什么特殊之处吗? 特殊之处:两个方法都叫 square。 一个参数是 int 类型,另一个是 double 类型。 虽然方法名相同,但参数类型不同,所以它们是重载关系。 编译器会根据传入的参数类型自…

WordPress站群 管理网站只能用ip访问网站

一、DNS简介一、DNS简介 DNS是计算机域名系统 (Domain Name System 或Domain Name Service) 的缩写&#xff0c;它是由域名解析器和域名服务器组成的。域名服务器是指保存有该网络中所有主机的域名和对应IP地址&#xff0c;并具有将域名转换为IP地址功能的服务器。其中域名必…

专业网站建设模块维护开发app制作公司

文章目录 1、前言2、在UG NX中创建草图,然后创建拉伸特征3、基于UFun函数的实现4、基于NXOpen的实现代码1、前言 UG NX是基于特征的三维建模软件,其中拉伸特征是一个很重要的特征,有读者问如何根据草图创建拉伸特征,我在这篇博客中讲述一下草图创建拉伸特征的UG NX二次开发…

做网站怎么加背景图片网站开发范围说明书

简介&#xff1a; 本文主要讲述了 iBatis 2.x 和 MyBatis 3.0.x 的区别&#xff0c;以及从 iBatis 向 MyBatis 移植时需要注意的地方。通过对本文的学习&#xff0c;读者基本能够了解 MyBatis 有哪些方面的改进&#xff0c;并能够顺利使用 MyBatis 进行开发。本文更适合有 iBat…

做网站全程指导wordpress免费资源模板

jSignature签名的用法1、先看看效果以后最后它是什么格式的2、先去下载该js3、下载以后就把它引入我们的HTML中4、看一下我的例子吧&#xff01;下期我们在讲&#xff0c;怎么把base64在后台处理&#xff0c;然后在存进我们指定的位置&#xff0c;以及怎么存数据库&#xff1b;…

2025 年氨基酸水溶肥厂家最新推荐榜单:聚焦花芽分化膨果上色需求,精选优质企业助农户科学选购花芽分化/膨果上色/促花稳果/低温酶解氨基酸水溶肥厂家推荐

当前农业生产中,氨基酸水溶肥因能助力作物花芽分化、促进膨果上色、实现促花稳果,成为农户提升作物产量与品质的关键农资。但市场上产品质量良莠不齐,部分产品存在氨基酸含量不达标、低温环境下吸收效率低、营养配比…

VMware ESXi 8.0U3g macOS Unlocker OEM BIOS 2.7 H3C 新华三 定制版

VMware ESXi 8.0U3g macOS Unlocker & OEM BIOS 2.7 H3C 新华三 定制版VMware ESXi 8.0U3g macOS Unlocker & OEM BIOS 2.7 H3C 新华三 定制版 VMware ESXi 8.0U3g macOS Unlocker & OEM BIOS 2.7 标准版和…

保定网站维护做动漫头像的网站

在前面的基础篇文章中&#xff0c;我给你介绍过索引的基本概念&#xff0c;相信你已经了解了唯一索引和普通索引的区别。今天我们就继续来谈谈&#xff0c;在不同的业务场景下&#xff0c;应该选择普通索引&#xff0c;还是唯一索引&#xff1f; 假设你在维护一个市民系统&…

2025 年最新防火涂料厂家排行榜:钢结构各类防火涂料优质厂家最新推荐,助力建筑安全选型 钢结构/水性/隧道/环保/饰面型防火涂料厂家推荐

随着建筑行业对防火安全重视程度的不断提升,防火涂料作为关键防护材料,其市场需求持续增长,但市场中产品质量参差不齐、品牌鱼龙混杂的问题也愈发凸显。部分品牌产品防火性能不达标、耐久性差,难以在火灾中发挥有效…

买极速赛车网站会动手做不毕业生登记表自我鉴定模板

1、 Response body:Containing string为中文 Response body:Containing string:为中文时&#xff0c;转换为unicode编码&#xff0c;并添加转义符。 2、get方式与post请求使用环境变量 post方式请求&#xff0c;请求体中包含有环境变量&#xff0c;引用方法&#xff1a; JSON格…

用群晖做网站服务器长治市住房保障和城乡建设管理局网站

dpdk原理 1、操作系统、计算机网络诞生已经几十年了&#xff0c;部分功能不再能满足现在的业务需求。如果对操作系统做更改&#xff0c;成本非常高&#xff0c;所以部分问题是在应用层想办法解决的&#xff0c;比如前面介绍的协程、quic等&#xff0c;都是在应用层重新开发的框…

做古玩的网站wordpress属于

目标是比开源精神疾病提供的基本报告更深入地挖掘&#xff0c;并了解更多属性之间的相互作用&#xff0c;这可以为所描述的决策者提供信息。 考虑的问题点&#xff1a; 不同性别属性的员工心理健康是否存在显着差异&#xff1f;不同年龄属性的员工心理健康是否存在显着差异&a…

[计算机组成] 计算机字体文件及其运行原理

0 序python的图形绘制库matplotlib默认不支持中文,但可支持通过集成第三方的中文字体文件后渲染中文:import numpy as np from matplotlib import pyplot as plt import matplotlib# 加载指定的字体文件 # 1. fname …

免费写作文网站搜索引擎环境优化

效果:在点击提交按钮时,首先进行js判断, 如果不符合条件,则alert出提示信息,并return false. 主要点就在于给form表单添加一个onsubmit事件. 在onsubmit事件中定义的函数里进行js验证处理.代码 : <!DOCTYPE html> <html lang"en"> <head><meta …