v-bind=“$attrs“ v-on=“$listeners“

发布于:2025-05-10 ⋅ 阅读:(17) ⋅ 点赞:(0)

在这里插入图片描述

在 Vue 中,v-bind=“ a t t r s " 和 v − o n = " attrs" 和 v-on=" attrs"von="listeners” 是两个非常有用的指令,常用于组件之间的属性和事件传递。以下为你详细解释:

  1. v-bind=“$attrs”
    a t t r s 是一个包含了父组件传递给子组件的所有非 p r o p s 属性的对象。这里所说的非 p r o p s 属性,就是指那些没有在子组件的 p r o p s 选项中定义的属性。借助 v − b i n d = " attrs 是一个包含了父组件传递给子组件的所有非 props 属性的对象。这里所说的非 props 属性,就是指那些没有在子组件的 props 选项中定义的属性。借助 v-bind=" attrs是一个包含了父组件传递给子组件的所有非props属性的对象。这里所说的非props属性,就是指那些没有在子组件的props选项中定义的属性。借助vbind="attrs" 指令,能够把这些非 props 属性自动绑定到子组件的根元素上。
    下面是一个简单示例:

<!-- 父组件 -->
<template>
  <ChildComponent msg="Hello" id="child" />
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  components: {
    ChildComponent
  }
};
</script>

<!-- 子组件 -->
<template>
  <div v-bind="$attrs">
    <!-- 这里会自动绑定父组件传递的非 props 属性 -->
  </div>
</template>

<script>
export default {
  props: []
};
</script>

在上述示例里,父组件向子组件传递了 msg 和 id 两个属性。由于子组件的 props 选项为空,所以 msg 和 id 都属于非 props 属性,它们会被绑定到子组件的根元素

上。
2. v-on=“$listeners”
l i s t e n e r s 是一个包含了父组件传递给子组件的所有自定义事件监听器的对象。使用 v − o n = " listeners 是一个包含了父组件传递给子组件的所有自定义事件监听器的对象。使用 v-on=" listeners是一个包含了父组件传递给子组件的所有自定义事件监听器的对象。使用von="listeners" 指令,能将这些事件监听器自动绑定到子组件的根元素上。
下面是一个示例:


<!-- 父组件 -->
<template>
  <ChildComponent @click="handleClick" />
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  components: {
    ChildComponent
  },
  methods: {
    handleClick() {
      console.log('Clicked!');
    }
  }
};
</script>

<!-- 子组件 -->
<template>
  <button v-on="$listeners">Click me</button>
</template>

<script>
export default {};
</script>

在这个例子中,父组件给子组件传递了一个 click 事件监听器。子组件通过 v-on=“ l i s t e n e r s " 把这个事件监听器绑定到了 < b u t t o n > 元素上,这样当按钮被点击时,父组件的 h a n d l e C l i c k 方法就会被调用。 3. V u e 3 中的变化在 V u e 3 里, listeners" 把这个事件监听器绑定到了 <button> 元素上,这样当按钮被点击时,父组件的 handleClick 方法就会被调用。 3. Vue 3 中的变化 在 Vue 3 里, listeners"把这个事件监听器绑定到了<button>元素上,这样当按钮被点击时,父组件的handleClick方法就会被调用。3.Vue3中的变化在Vue3里,listeners 被移除了,因为所有的事件监听器现在都被包含在 a t t r s 中。因此,在 V u e 3 里只需使用 v − b i n d = " attrs 中。因此,在 Vue 3 里只需使用 v-bind=" attrs中。因此,在Vue3里只需使用vbind="attrs” 就能同时传递属性和事件监听器。示例如下:

<!-- 父组件(Vue 3-->
<template>
  <ChildComponent msg="Hello" @click="handleClick" />
</template>

<script setup>
import ChildComponent from './ChildComponent.vue';
const handleClick = () => {
  console.log('Clicked!');
};
</script>

<!-- 子组件(Vue 3-->
<template>
  <button v-bind="$attrs">Click me</button>
</template>

<script setup>
defineProps({});
</script>




在这个 Vue 3 的示例中,msg 属性和 click 事件监听器都会通过 v-bind="$attrs" 被传递到子组件的 <button> 元素上。

网站公告

今日签到

点亮在社区的每一天
去签到