Vue中$props、$attrs和$listeners的使用详解
文章目录
- 透传属性
- 如何禁止“透传属性和事件”
- 多根节点设置透传
- 访问“透传属性和事件”
- `$props`、`$attrs`和`$listeners`的使用详解
透传属性
- 透传属性和事件并没有在子组件中用
props
和emits
声明 - 透传属性和事件最常见的如
@click
和class
、id
、style
- 当子组件只有一个根元素时,透传属性和事件会自动添加到该根元素上;如果根元素已有
class
或style
属性,它会自动合并
如何禁止“透传属性和事件”
- 在选项式 API 中,你可以在组件选项中设置
inheritAttrs: false
来阻止; - 在组合式 API 的
<script setup>
中,你需要一个额外的<script>
块来书写inheritAttrs: false
选项声明来禁止
<script>
export default {inheritAttrs: false // 阻止自动透传给唯一的根组件
}
</script>
多根节点设置透传
多根节点的组件并没有自动“透传属性和事件”的行为,由于Vue不确定要将“透传属性和事件”透传到哪里,所以我们需要v-bind="$attrs"
来显式绑定,否则将会抛出一个运行时警告。
<button class="chip" v-bind="$attrs">普通纸片</button>
访问“透传属性和事件”
在选项式 API 中,我们可通过this.$attrs
来访问“透传属性和事件”
在组合式 API 中的<script setup>
中引入useAttrs()
来访问一个组件的“透传属性和事件”
<script setup>
import { useAttrs } from 'vue';// 透传的属性和事件对象
let attrs = useAttrs()// 在 JS 中访问透传的属性和事件
function showAttrs() {console.log(attrs)console.log(attrs.class)console.log(attrs.title)console.log(attrs.style)attrs.onClick()
}
</script><template><button class="chip" v-bind="attrs"></button><h6>{{ attrs }}</h6><ul><li>{{ attrs.title }}</li><li>{{ attrs.class }}</li><li>{{ attrs.style }}</li></ul><button @click="attrs.onClick()">执行透传的事件</button><button @click="showAttrs">在 JS 中访问透传的属性和事件</button>
</template><style>
.chip {border: none;background-color: rgb(231, 231, 231);padding: 8px 15px;margin: 10px;
}.rounded {border-radius: 100px;
}
</style>
$props
、$attrs
和$listeners
的使用详解
$props
:当前组件接收到的 props 对象。Vue 实例代理了对其 props 对象属性的访问。$attrs
:包含了父作用域中不作为 prop 被识别 (且获取) 的特性绑定 (class 和 style 除外)。$listeners
:包含了父作用域中(不含.native
修饰器的)v-on
事件监听器。他可以通过v-on="listeners"
传入内部组件
1、父组件
<template><div><div>父亲组件</div><Child:foo="foo":zoo="zoo"@handle="handleFun"></Child></div>
</template><script>
import Child from './Child.vue'
export default {components: { Child },data() {return {foo: 'foo',zoo: 'zoo'}},methods: {// 传递事件handleFun(value) {this.zoo = valueconsole.log('孙子组件发生了点击事件,我收到了')}}
}
</script>
2.儿子组件(Child.vue)
在儿子组件中给孙子组件添加v-bind="$attrs"
,这样孙子组件才能接收到数据。
$attrs
是从父组件传过来的,且儿子组件未通过props接收的数据,例如zoo
<template><div class='child-view'><p>儿子组件--{{$props.foo}}与{{foo}}内容一样</p><GrandChild v-bind="$attrs" v-on="$listeners"></GrandChild></div>
</template><script>
import GrandChild from './GrandChild.vue'
export default {// 继承所有父组件的内容inheritAttrs: true,components: { GrandChild },props: ['foo'],data() {return {}}
}
</script>
3.孙子组件(GrandChild.vue)
在孙子组件中一定要使用props接收从父组件传递过来的数据
<template><div class='grand-child-view'><p>孙子组件</p><p>传给孙子组件的数据:{{zoo}}</p><button @click="testFun">点我触发事件</button></div>
</template><script>
export default {// 不想继承所有父组件的内容,同时也不在组件根元素dom上显示属性inheritAttrs: false,// 在本组件中需要接收从父组件传递过来的数据,注意props里的参数名称不能改变,必须和父组件传递过来的是一样的props: ['zoo'],methods: {testFun() {this.$emit('handle', '123')}}
}
</script>
相关文章:
Vue中$props、$attrs和$listeners的使用详解
文章目录 透传属性如何禁止“透传属性和事件”多根节点设置透传访问“透传属性和事件” $props、$attrs和$listeners的使用详解 透传属性 透传属性和事件并没有在子组件中用props和emits声明透传属性和事件最常见的如click和class、id、style当子组件只有一个根元素时…...

爱智EdgerOS之深入解析AI图像引擎如何实现AI视觉开发
一、前言 AI 视觉是为了让计算机利用摄像机来替代人眼对目标进行识别,跟踪并进一步完成一些更加复杂的图像处理。这一领域的学术研究已经存在了很长时间,但直到 20 世纪 70 年代后期,当计算机的性能提高到足以处理图片这样大规模的数据时&am…...

Pytest+Allure生成自动化测试报告!
前言 在自动化测试中,有unittestHTMLTestRunner自动化测试报告,但是生成的测试报告不够美观详细,今天我们来学习一下PytestAllure生成自动化测试报告。 一:安装python中的allure依赖库 在dos窗口中,输入下面三个命令…...

HTMLTestRunner
HTMLTestRunner是Python的标准库unittest单元测试框架的一个扩 展,用于生成HTML测试报告 下载地址: http://tungwaiyip.info/software/HTMLTestRunner.html HTML测试结果 HTMLTestRunner.py下载地址http://tungwaiyip.info/software/HTMLTestRunner.htm…...
ELK架构监控MySQL慢日志
目录 一、架构概述 二、安装部署 三、Filebeat配置 四、Logstash配置 一、架构概述 本文使用将使用filebeat收集mysql日志信息,发送到redis中缓存,由logstash从redis中取出,发送es中存储,再从kibana中展示。 二、安装部署 ELK…...
Linux命令---关机
介绍 使用命令关闭linux服务器或计算机 命令 立即关机: shutdown -h now指定十分钟后关机: shutdown -h 10...
点云从入门到精通技术详解100篇-基于拓扑约束的3D点云实例分割(续)
目录 3.6实验结果与分析 3.6.1实验数据集 3.6.2实验设置 3.6.3定量结果 3.6.4定性评价...

java版Spring Cloud+Spring Boot+Mybatis之隐私计算 FATE - 多分类神经网络算法测试
一、说明 本文分享基于 Fate 使用 横向联邦 神经网络算法 对 多分类 的数据进行 模型训练,并使用该模型对数据进行 多分类预测。 二分类算法:是指待预测的 label 标签的取值只有两种;直白来讲就是每个实例的可能类别只有两种 (0 或者 1)&…...
Java之时间类2(JDK8新增)
一、Date类 (一)、ZoneId:时区 1、概述 ZoneId是Java 8中处理时区的类。它用于表示时区标识符,例如“America/New_York”或“Asia/Tokyo”。一共有600个时区。 2、常用方法: static Set<String> getAvailableZoneIds()获…...

MySQL InnoDB Replication部署方案与实践
1. 概述 MySQL Innodb ReplicaSet 是 MySQL 团队在 2020 年推出的一款产品,用来帮助用户快速部署和管理主从复制,在数据库层仍然使用的是主从复制技术。 ReplicaSet 主要包含三个组件:MySQL Router、MySQL Server 以及 MySQL Shell 高级客户…...

进程的同步和异步、进程互斥
一、进程同步和异步 同步(Synchronous): 同步指的是程序按照顺序执行,一个操作完成后才能进行下一个操作。在多进程或多线程的环境中,同步意味着一个进程(或线程)在执行某个任务时,…...

搞定课件录制,新手必备指南!
“有人知道课件怎么录制吗?学校要求我们师范专业的学生出去实习,现在需要录制一个课件视频,以便在课堂上播放,可是我不会录制教学视频,真的很头疼,有人能帮帮我吗。” 随着在线教育的崛起,课件…...

DevOps搭建(九)-Jenkins实现基础CI、CD详细操作
1、创建可运行SpringBoot项目 1.1、创建一个新工程 在idea里创建一个项目,这里叫devops-test,如下图: String Boot版本要选择2.x的,依赖直选中Spring Web选项即可: 修改pom.xml文件,在build标签中增加如下内容,目的是简化jar包名称。 <finalName>devops-test&l…...

十指波课堂:让学习编程不再是难事
十指波课堂是一家致力于发展线上私教平台的教育机构,主要的科目是计算机编程相关语言。由于学习编程的过程较为困难,学习者没有具体的学习方向,将要达到的就业水平不明,总会因为一些小问题困扰几个小时,这样会严重的影…...

IDEA卡顿,进行性能优化设置(亲测有效)——情况二
问题背景与现象 IDEA今天突然显示到期,于是从同事那边搞到一个很好用的破解方式,说实话,非常方便(后续在安前码后中分享) 破解之后呢,香了一阵子,但是突然显示开始卡顿,界面几乎是…...

利用Python和OpenCV实现将图像识别为Excel表格的便捷方法
当今社会,图像识别技术的发展为我们提供了许多便利,比如将图像中的文本信息转化为可编辑的电子表格。在本文中,我们将介绍如何利用Python结合OpenCV和pytesseract库,来实现将图像识别为Excel表格的过程。 首先,我们需…...

mysql:查看一个表的索引信息
可以使用命令SHOW INDEX FROM table_name;查看一个表的索引信息,例如:...

12月11日作业
完善对话框,点击登录对话框,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到其他界面 如果账号和密码不匹配…...

HTTP协议在Linux上进行数据库访问代码示例
在Linux上使用HTTP协议进行数据库访问通常涉及到使用库如requests来进行HTTP请求,以及使用json或类似的库来处理返回的数据。下面是一个使用Python的简单示例,展示如何通过HTTP协议在Linux上访问数据库。 首先,你需要确保你的Linux系统上已经…...

CS.DEEP | 基于 openGauss 实现的计算机论坛项目
前言 本项目是一个基于前后端分离(后端:SpringBoot openGauss,前端:Vue3 Element Plus)实现的开源计算机博客论坛项目,旨在为用户提供一个方便、高效的博客发布和交流平台。 本平台支持 Markdown 编辑&…...

idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...

《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...