vue3组件封装时使用到$attrs,更正一下

文章详细解释了在Vue3中,$attrs用于在组件间传递未在中间组件声明的属性,而$listeners则用于处理子组件向上传递的事件。在封装组件时,通过v-bind:$attrs和v-on:$listeners可以简化属性和事件的处理,使得子组件能继承父组件的属性和事件,无需在每个父组件中单独处理。举例说明了在二次封装ElementUI组件时的应用。

vue3中$attrs与$listeners

作用:

  • $attrs: 在A(爷) -> B(父) -> C(子) 的传值的过程中,B组件绑定$attrs,C组件就可直接获取到A组件传入的属性(且该属性未在B组件中未通过props接收)
  • $listeners: 在 C(子) -> B(父) -> A(爷)的触发自定义事件并向上传值的过程中,A组件中可以直接绑定C组件中的事件(且该事件未在B组件中触发)

场景:

封装element组件时,避免麻烦可在封装子组件上v-bind绑定$attrs来让子组件继承element组件的属性,通过v-on绑定$listeners来使子组件继承element组件事件。

  • 为二次封装的组件绑定$attrs/$listeners

  • 将要做统一处理的数据、属性、方法等写在二次封装的组件中

  • 将每个父组件调用时需要变化的属性或方法直接在父组件调用时传入

如下例中的斑马纹属性,有些父组件需要有些不需要,所以直接在父组件调用时传值即可,在二次封装的子组件中则无需再通过props声明

1.继承element的所有属性和方法

子组件中:
<el-table v-if="tableData.length > 0 "
          :data="tableData"
          v-bind="$attrs" 
          row-key="id"
          @selection-change="select"
          ref="tableRef"
            >...</el-table>
<script>
    const props = defineProps({
        将父组件传入并需要处理的属性,在此处声明
    })
    const emit = defineEmits([
  	将父组件绑定并需要处理的事件,在此处声明
   ])
</script>
父组件中:
<My-table :colums=colums stripe  用到ele的什么属性或方法直接在此处绑定即可(子组件中未声明的,此例中如stripe斑马纹属性 />
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值