当前位置: 首页 > news >正文

Vue中$props、$attrs和$listeners的使用详解

文章目录

  • 透传属性
    • 如何禁止“透传属性和事件”
    • 多根节点设置透传
    • 访问“透传属性和事件”
  • `$props`、`$attrs`和`$listeners`的使用详解

透传属性

  • 透传属性和事件并没有在子组件中用propsemits声明
  • 透传属性和事件最常见的如@clickclassidstyle
  • 当子组件只有一个根元素时,透传属性和事件会自动添加到该根元素上;如果根元素已有classstyle属性,它会自动合并

如何禁止“透传属性和事件”

  • 在选项式 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当子组件只有一个根元素时&#xf…...

爱智EdgerOS之深入解析AI图像引擎如何实现AI视觉开发

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

Pytest+Allure生成自动化测试报告!

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

HTMLTestRunner

HTMLTestRunner是Python的标准库unittest单元测试框架的一个扩 展&#xff0c;用于生成HTML测试报告 下载地址&#xff1a; http://tungwaiyip.info/software/HTMLTestRunner.html HTML测试结果 HTMLTestRunner.py下载地址http://tungwaiyip.info/software/HTMLTestRunner.htm…...

ELK架构监控MySQL慢日志

目录 一、架构概述 二、安装部署 三、Filebeat配置 四、Logstash配置 一、架构概述 本文使用将使用filebeat收集mysql日志信息&#xff0c;发送到redis中缓存&#xff0c;由logstash从redis中取出&#xff0c;发送es中存储&#xff0c;再从kibana中展示。 二、安装部署 ELK…...

Linux命令---关机

介绍 使用命令关闭linux服务器或计算机 命令 立即关机&#xff1a; shutdown -h now指定十分钟后关机&#xff1a; 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 使用 横向联邦 神经网络算法 对 多分类 的数据进行 模型训练&#xff0c;并使用该模型对数据进行 多分类预测。 二分类算法&#xff1a;是指待预测的 label 标签的取值只有两种&#xff1b;直白来讲就是每个实例的可能类别只有两种 (0 或者 1)&…...

Java之时间类2(JDK8新增)

一、Date类 &#xff08;一&#xff09;、ZoneId&#xff1a;时区 1、概述 ZoneId是Java 8中处理时区的类。它用于表示时区标识符&#xff0c;例如“America/New_York”或“Asia/Tokyo”。一共有600个时区。 2、常用方法: static Set<String> getAvailableZoneIds()获…...

MySQL InnoDB Replication部署方案与实践

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

进程的同步和异步、进程互斥

一、进程同步和异步 同步&#xff08;Synchronous&#xff09;&#xff1a; 同步指的是程序按照顺序执行&#xff0c;一个操作完成后才能进行下一个操作。在多进程或多线程的环境中&#xff0c;同步意味着一个进程&#xff08;或线程&#xff09;在执行某个任务时&#xff0c;…...

搞定课件录制,新手必备指南!

“有人知道课件怎么录制吗&#xff1f;学校要求我们师范专业的学生出去实习&#xff0c;现在需要录制一个课件视频&#xff0c;以便在课堂上播放&#xff0c;可是我不会录制教学视频&#xff0c;真的很头疼&#xff0c;有人能帮帮我吗。” 随着在线教育的崛起&#xff0c;课件…...

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…...

十指波课堂:让学习编程不再是难事

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

IDEA卡顿,进行性能优化设置(亲测有效)——情况二

问题背景与现象 IDEA今天突然显示到期&#xff0c;于是从同事那边搞到一个很好用的破解方式&#xff0c;说实话&#xff0c;非常方便&#xff08;后续在安前码后中分享&#xff09; 破解之后呢&#xff0c;香了一阵子&#xff0c;但是突然显示开始卡顿&#xff0c;界面几乎是…...

利用Python和OpenCV实现将图像识别为Excel表格的便捷方法

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

mysql:查看一个表的索引信息

可以使用命令SHOW INDEX FROM table_name;查看一个表的索引信息&#xff0c;例如&#xff1a;...

12月11日作业

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

HTTP协议在Linux上进行数据库访问代码示例

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

CS.DEEP | 基于 openGauss 实现的计算机论坛项目

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

复古游戏机式AI绘图:像素极光引擎LoRA模块化扩展实战教程

复古游戏机式AI绘图&#xff1a;像素极光引擎LoRA模块化扩展实战教程 1. 像素极光引擎简介 Pixel Aurora&#xff08;像素极光&#xff09;是一款将复古游戏机美学与现代AI绘图技术完美融合的创新工具。它采用经典的8-bit像素风格界面&#xff0c;却搭载了最先进的扩散模型技…...

MAI-UI-8B快速部署:支持CUDA显卡的一键安装教程

MAI-UI-8B快速部署&#xff1a;支持CUDA显卡的一键安装教程 1. 认识MAI-UI-8B智能助手 MAI-UI-8B是一款革命性的图形界面智能助手&#xff0c;它不仅能理解你的指令&#xff0c;还能直接操作图形界面完成实际任务。想象一下&#xff0c;当你需要订机票、购物或者处理工作信息…...

Cogito-v1-preview-llama-3B应用探索:建筑行业BIM文档智能摘要系统

Cogito-v1-preview-llama-3B应用探索&#xff1a;建筑行业BIM文档智能摘要系统 1. 引言&#xff1a;建筑行业的文档挑战与AI机遇 建筑行业每天产生海量的BIM文档——设计图纸、施工方案、材料清单、进度报告&#xff0c;这些文档往往长达数百页&#xff0c;工程师和项目经理需…...

OpenClaw跨技能协作:gemma-3-12b-it协调多个模块完成复杂项目

OpenClaw跨技能协作&#xff1a;gemma-3-12b-it协调多个模块完成复杂项目 1. 从单任务到多技能协作的进化 去年第一次接触OpenClaw时&#xff0c;我只把它当作一个能执行简单命令的自动化工具——整理文件夹、批量重命名照片、自动回复邮件。直到上个月尝试用gemma-3-12b-it模…...

计算机网络:从基础到未来趋势,从0死磕全栈之Next.js 中间件(Middleware)详解与实战。

计算机网络基础概念 计算机网络是通过通信链路和交换设备将地理上分散的计算机系统连接起来&#xff0c;实现资源共享和信息传递的系统。其核心目标是提供高效、可靠的数据传输服务。 网络拓扑结构包括星型、总线型、环型和网状等。每种拓扑结构在性能、可靠性和成本上各有优劣…...

OpenClaw文件管理:Qwen3-4B驱动的智能归类与重命名

OpenClaw文件管理&#xff1a;Qwen3-4B驱动的智能归类与重命名 1. 为什么需要智能文件管理 每次打开电脑&#xff0c;看到满屏杂乱无章的下载文件夹&#xff0c;我的强迫症都要发作一次。从项目文档、会议录音到临时截图&#xff0c;所有文件都堆在同一个目录下&#xff0c;找…...

CSS如何实现文字加粗而不改变宽度_利用text-shadow模拟加粗

会&#xff0c;text-shadow模拟加粗因软边阴影导致文字模糊&#xff0c;尤其小字号或Retina屏&#xff1b;需设blur-radius为0&#xff0c;用多方向1px硬边阴影&#xff08;如-1px 0 0, 1px 0 0等&#xff09;并启用GPU加速。text-shadow模拟加粗会导致文字模糊&#xff1f;会&…...

从MOOC习题到实战:手把手教你用Python模拟计算机存储系统(附源码)

从MOOC习题到实战&#xff1a;手把手教你用Python模拟计算机存储系统&#xff08;附源码&#xff09; 在计算机组成原理的学习过程中&#xff0c;存储系统往往是最令人头疼的章节之一。那些关于寻址范围、芯片扩展、大小端存储的概念&#xff0c;常常让学习者陷入抽象的数学计算…...

嵌入式USB MIDI主机栈的空指针防护与实时性增强

1. USBHOST 库概述&#xff1a;面向嵌入式实时系统的 MIDI 主机协议栈增强实现USBHOST 是一个专为 ARM Cortex-M 系统&#xff08;特别是基于 mbed OS 的 STM32/NXP 平台&#xff09;设计的轻量级 USB 主机协议栈扩展模块&#xff0c;其核心目标是可靠、低延迟地支持 USB MIDI …...

用Python可视化回溯算法:一步步动画演示八皇后问题的92种解法

用Python动画拆解八皇后问题&#xff1a;可视化回溯算法的92种解法 国际象棋盘上的八个皇后如何互不攻击&#xff1f;这个1848年提出的经典问题&#xff0c;曾让数学家高斯误算为76种解法。如今借助Python的可视化能力&#xff0c;我们可以将回溯算法的"试错-回退-重试&qu…...