Vue的$attrs和$listeners的作用是什么?

秋敏君_3380

秋敏君_3380

2025-07-13

384人浏览

原创

$attrs 是父组件传递给子组件的未在 props 中声明的所有属性组成的对象,用于透传属性到底层元素;$listeners 是父组件绑定在子组件上的所有事件监听器组成的对象,用于透传事件。例如,在封装输入组件时,通过 v-bind="$attrs" 和 v-on="$listeners" 可将父组件传递的属性和事件直接应用到内部的 input 元素上。常见用途包括:1. 封装基础组件时避免手动透传属性与事件;2. 防止 props 泛滥;3. vue 3 中 $listeners 已合并进 $attrs,事件以 onxxx 形式存在,只需使用 v-bind="$attrs" 即可同时绑定属性与事件。理解这两个属性能提升组件封装的灵活性与简洁性。

Vue的$attrs和$listeners的作用是什么?

在 Vue 开发中,$attrs$listeners 是两个非常实用但容易被忽视的实例属性。它们主要用在组件通信中,尤其是在封装高阶组件或者需要透传属性和事件的时候特别有用。


什么是 $attrs

$attrs 是一个对象,包含了父组件传递给当前组件的所有非 props 属性(也就是没有在 props 中声明的属性)。

举个例子,如果你有一个组件:

<template><input type="text" v-bind="$attrs"></template>

父组件这样使用它:

<myinput placeholder="请输入内容" class="form-control"></myinput>

placeholderclass 都会被包含在 $attrs 中,然后通过 v-bind="$attrs" 直接绑定到 <input> 元素上。

常见用途:封装可复用的基础组件时,比如输入框、按钮等,用于将所有未显式处理的属性直接应用到底层元素上。在组合组件结构时避免手动透传一堆属性。

⚠️ 注意:如果某个属性已经在 props 中定义了,它就不会出现在 $attrs 中。


什么是 $listeners

$listeners 是一个对象,包含了父组件绑定在当前组件上的所有监听的事件。它通常用来将子组件的事件原样传递给更内层的元素。

比如你写了一个包装组件:

<template><input type="text" v-on="$listeners"></template>

父组件监听了 @input

Vue
Vue

避免 Vue 常见错误——响应式陷阱、ref 与 reactive 区别、计算属性时机及 Composition API 陷阱。

下载
<myinput></myinput>

那么这个 input 事件就会通过 $listeners 被绑定到底层的 <input> 上。

常见用途:

  • 组件封装时透传事件,特别是像 inputchange 这类基础事件。
  • 简化父子组件之间的事件转发逻辑。

? 提示:从 Vue 2.4 开始,$listeners 可以作为 v-on 的对象语法来使用。Vue 3 中虽然不再单独暴露 $listeners,但你可以通过 v-on="..." 直接绑定监听器。


使用场景与注意事项

1. 封装基础表单组件

当你在做一个 UI 库,封装一个通用的输入组件时,$attrs$listeners 可以帮你省去很多重复代码,让组件行为更接近原生 HTML 元素。

<template><input v-bind="$attrs" v-on="$listeners"></template>

这样,用户就可以像使用普通 <input> 一样使用你的组件,包括设置 placeholdertyperequired 等属性,以及监听 inputblur 等事件。

2. 避免 props 泛滥

有时候你可能不想把所有的属性都通过 props 显式声明一遍,尤其是那些只用于底层 DOM 的属性。这时候 $attrs 就很有用了。

3. 注意 Vue 3 的变化

在 Vue 3 中,$listeners 已经合并进 $attrs,也就是说,事件也会以 onXxx 的形式出现在 $attrs 中。例如:

{
  onClick: fn,
  onInput: fn
}

所以你在 Vue 3 中只需要用 v-bind="$attrs" 就可以同时绑定属性和事件。


基本上就这些。这两个属性虽然看起来简单,但在做组件抽象或封装时非常实用,理解它们能让你写出更灵活、更简洁的组件逻辑。

前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

vue

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.18

4427

5

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2023.08.10

2048

6

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

2024.01.03

3056

7

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

2025.12.06

286

9

DOM是什么意思
DOM是什么意思

dom的英文全称是documentobjectmodel,表示文件对象模型,是w3c组织推荐的处理可扩展置标语言的标准编程接口;dom是html文档的内存中对象表示,它提供了使用javascript与网页交互的方式。想了解更多的相关内容,可以阅读本专题下面的文章。

2024.08.14

6441

7

点击input框没有光标怎么办
点击input框没有光标怎么办

点击input框没有光标的解决办法:1、确认输入框焦点;2、清除浏览器缓存;3、更新浏览器;4、使用JavaScript;5、检查硬件设备;6、检查输入框属性;7、调试JavaScript代码;8、检查页面其他元素;9、考虑浏览器兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.24

634

4

Aionclaw智能助手介绍
Aionclaw智能助手介绍

本专题汇总了AionClaw(AI龙虾助手)的功能介绍与在线使用入口。AionClaw是杭州趣猿人工智能有限公司推出的桌面级AI智能体,能直接在电脑上读写文件、运行脚本、操作浏览器,自动交付Word、PPT、Excel等成品。

2026.09.20

0

13

AionClaw AI智能体与电脑自动化任务执行功能使用教程
AionClaw AI智能体与电脑自动化任务执行功能使用教程

AionClaw专题整理AI智能体与电脑自动化相关功能使用教程,涵盖安装部署、AI任务执行、Skills技能、文件处理、浏览器控制、电脑操作、持久记忆、聊天工具连接以及办公、编程和内容创作等功能,帮助用户快速掌握AionClaw的实际使用方法。

2026.09.20

0

15

AI视频生成软件推荐
AI视频生成软件推荐

本专题汇总了当前主流的AI视频生成软件推荐与排行榜单,涵盖seko、AniShort、剧云、Lovart、LiblibAI及立刻mv等热门工具。同时整理了各软件在文生视频、图生视频、时长限制、画质表现及免费额度等方面的差异对比,助您快速选对适合创作需求的AI视频生成工具。

2026.09.16

180

9

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
uni-app快速上手
uni-app快速上手

共0课时 | 0人学习

Vue 教程
Vue 教程

共42课时 | 16.6万人学习

Vue3.x 工具篇--十天技能课堂
Vue3.x 工具篇--十天技能课堂

共26课时 | 2.4万人学习