Vue中$attrs、$listeners的用法总结

用法如下:

1、v-on="$listeners"

父组件A,子组件B,孙组件C。
C组件中emit事件后,在B中可以直接使用v-on="$listeners"接收,此时可以在A组件中的B上直接使用C中emit出来的事件。

2、v-bind="$attrs"
父组件A,子组件B,孙组件C。
A上设置值,若没在B上用props进行接收,则可以直接在B中的C设置v-bind="$attrs",此时相当于把属性直接设置在C上。

 

这两个的作用,主要是用在二次封装某些组件的时候,比如二次封装elementUI 或者antd 组件的时候,使用这样的方法,不需要知道组件具体的属性或者参数,即可实现相应的封装功能。

 注意:vue3中废弃了$listeners

<script>
export default {
  created() {},
};
</script>

<template>
  <a-button class="add-button-color" v-bind="$attrs" v-on="$listeners">
    <slot>添加</slot>
  </a-button>
</template>
<style lang="less" scoped>
.add-button-color {
  background: linear-gradient(90deg, #4fe073 0%, #00bf60 100%);
  width: 80px;
}
</style>

这样可以实现,包裹本身antd组件的组件,可以传入任何a-button支持的属性或者自定义事件。

posted @ 2023-04-10 15:13  茶记忆  阅读(544)  评论(0编辑  收藏  举报