Vue 2.x $attrs 与 $listeners

发布于 2025-02-01 12:13:22 字数 1681 浏览 6 评论 0

inheritAttrs

  • inheritAttrs:true 继承除 props 之外的所有属性
  • inheritAttrs:false 只继承 class、style 属性

$attrs

包含了父作用域中不被认为 (且不预期为) props 的特性绑定 (class 和 style 除外),并且可以通过 v-bind=”$attrs” 传入内部组件。

当一个组件没有声明任何 props 时,它包含所有父作用域的绑定 (class 和 style 除外)

$listeners

包含了父作用域中的 (不含 .native ​ 修饰符) v-on 事件监听器。它可以通过 v-on=”$listeners” ​ 传入内部组件

它是一个对象,里面包含了作用在这个组件上的所有事件监听器,相当于子组件继承了父组件的事件

使用

grand.vue

<div>
  <parent :customProp="..." @click="customClick" @click.native="nativeClick"></parent>
</div>
// emit customClick from parent
// emit customClick from child

parent.vue

<div>
  <child v-bind="$attrs" v-on="$listeners"></child>
</div>
...
inheritAttrs: false,
created () {
  this.$emit('click', 'emit customClick from parent')
  console.log(this.$attrs) // {customProp: ...}
  console.log(this.$listeners) // {click: customClick}
},

child.vue

<div>
  <input type="text" :value="customProp">
</div>
...
props: ['customProp'],
created () {
  this.$emit('click', 'emit customClick from child')
  console.log(this.$attrs) // {}
  console.log(this.$listeners) // {click: customClick}
},

综上

  1. $listeners 里面包含了作用在这个组件上的所有监听器,但是不包含 .native 的监听器
  2. $attrs$listeners 可以无限向下透传,每层传递都可以添加选项
  3. $attrs 如果遇到同名 props 会减少

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

文章
评论
28 人气
更多

推荐作者

alipaysp_giMRmwQ3mK

文章 0 评论 0

爱她像谁

文章 0 评论 0

清风疏影

文章 0 评论 0

mb_OO8gCSDD

文章 0 评论 0

佚名

文章 0 评论 0

汹涌人海

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文