Vue3 defineEmits 获取emit执行后的返回值

在Vue3中,emit 执行后,是无法直接获取到返回值的。
先看代码:
index.vue

<script setup>
import HelloWorld from './components/HelloWorld.vue'
const sendMsg = (text) => {
  console.log(text)
  return '发送成功!'
}
</script>

<template>
  <header>
    <HelloWorld @msg="sendMsg" />
  </header>
</template>

HelloWorld.vue

<template>
  <button @click="sendMsg"> {{ buttonText }}</button>
</template>
<script  setup>
import { ref } from 'vue'
const buttonText = ref('发送')
const sendMsg = () => {
  const result = emits('msg','hello')
  console.log('result:', result)
  buttonText.value = result
}
const emits = defineEmits(['msg'])
</script>

在这里插入图片描述

在子组件HelloWorld中,我们的目的是当点击 button 按钮时,获取emits 的返回值,然后按钮显示 发送成功, 但是取到的是 undefined,因为vue3就不支持这种写法。

在这里插入图片描述

那我们要怎么获取 emit的返回值呢?其实我们可以借助一个callback 函数,来进行取值。
HelloWorld.vue

<template>
  <button @click="sendMsg"> {{ buttonText }}</button>
</template>
<script  setup>
import { ref } from 'vue'
const buttonText = ref('发送')
const sendMsg = () => {
  let result = ''
  emits('msg',{text: 'hello', fn: (i)=>{
    result = i
  }})
  console.log('result:', result)
  buttonText.value = result
}
const emits = defineEmits(['msg'])
</script>

index.vue

<script setup>
import HelloWorld from './components/HelloWorld.vue'
const sendMsg = ({text, fn}) => {
  console.log(text)
   fn('发送成功!')
}
</script>

<template>
  <header>
    <HelloWorld @msg="sendMsg" />
  </header>
</template>

在这里插入图片描述

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值