在vue中使用defineEmit时,如何在子组件获得父组件函数中的返回值
时间: 2023-05-31 11:06:54 浏览: 147
在使用 `defineEmits` 声明的自定义事件中,无法直接获得父组件函数的返回值。因为自定义事件是异步的,事件触发后,父组件函数的返回值已经无法直接传递给子组件。
但是,可以通过在父组件中设置数据,在子组件中监听该数据的变化来获取父组件函数的返回值。
例如,父组件中定义一个 `result` 数据,当父组件函数执行后,将返回值赋值给 `result`:
```vue
<template>
<div>
<button @click="doSomething">执行操作</button>
<child-component :result="result"></child-component>
</div>
</template>
<script>
import { defineEmits, ref } from 'vue'
export default {
emits: ['my-event'],
components: {
ChildComponent
},
setup() {
const result = ref(null)
const doSomething = async () => {
// 执行一些操作
const res = await someAsyncFunction()
result.value = res
// 触发自定义事件
emit('my-event', res)
}
return {
result,
doSomething
}
}
}
</script>
```
在子组件中,监听 `result` 的变化:
```vue
<template>
<div>
<p>父组件传递的结果:{{ result }}</p>
</div>
</template>
<script>
import { defineProps, watch } from 'vue'
export default {
props: {
result: {
type: null,
required: true
}
},
setup(props) {
watch(() => props.result, (newVal) => {
console.log('父组件函数的返回值:', newVal)
})
return {
// ...
}
}
}
</script>
```
这样,当父组件函数执行后,子组件就可以获取到父组件函数的返回值了。
阅读全文