Vue组件之属性及监听器穿透attrs

1. 穿透案例
父组件

<template>
  <div>{{ message }}</div>
  <!--这里定义的@click事件是classtest组件的button按钮的click事件-->
  <classtest :class="classes" name="11111" @click="updatemessage" />
</template>
<script setup>
import { ref } from "vue";
import classtest from "./components/classtest.vue";

let message = ref("点击按钮我会被修改");

let classes = ref("fontsize");

function updatemessage() {
  message.value = "按钮被点击,我被修改了";
}
</script>
<style scoped>
</style>

子组件

<template>
  <!--附加父组件class属性-->
  <div :class="$attrs.class">{{ message }}</div>
  <br />
  <!--通过v-bind附加父组件所有属性属性-->
  <!--这个button接收了父组件的click事件,但是本身也有click事件
  此时既会执行父组件的click事件方法,也会执行此组件的click事件方法-->
  <button v-bind="$attrs" @click="aa">点击修改文字</button>
</template>

<script setup>
import { ref } from "vue";

let message = ref("这里的字体大小是外部传递的");

function aa() {
  console.log("12222222");
}
</script>

<style>
.fontsize {
  font-size: 23px;
}
</style>

2. 如何禁用继承

defineOptions({
  inheritAttrs: false
})

3. 访问穿透属性
<script setup> 中使用 useAttrs() API

<template>
</template>

<script setup>
import { useAttrs } from "vue";
const attrs=useAttrs();
console.log(attrs)
</script>

<style>
</style>

没有使用 <script setup>

<template>
</template>

<script>
export default {
  setup(props, ctx) {
    // 透传 attribute 被暴露为 ctx.attrs
    console.log(ctx.attrs)
  }
}
</script>

<style>
</style>
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值