vue3子组件调用父组件的方法并获取返回值

需求:子组件需要向父组件传参,并获取父组件的返回值,父组件的方法自身也需要传参。

子组件

<script lang="ts" setup>
	const emits = defineEmits(["handleSave"]);
	const save = () => {
	  emits("handleSave", {
	    val: inputValue.value,
	    callback: (result: any) => {
	    	console.log('获取父组件方法的返回值',result)
	    },
	  });
	};

父组件

<template>
  <el-table :data="tableData">
	<el-table-column prop="funds" label="经费">
         <template #default="scope">
            <childEdit v-model="scope.row.funds" @handleSave="handleSave($event,scope.row,'funds')"></childEdit >
          </template>
     </el-table-column>
  </el-table>
</template>

<script setup>
const handleSave = async (e,val,key)=>{
  console.log('子组件的参数',e.value)
  val[key] = Number(e.val)
  //给子组件返回值
  e.callback(true)
}
</script>

Vue3中,组件要想调用组件方法获取返回值,可以使用`ref`、自定义事件或者`$emit`/$on`对等机制。 1. **使用props** (推荐): 如果组件希望将数据传递给组件,并通过方法返回,可以通过`props`进行通信。组件通过`methods`定义一个方法,然后在需要的地方调用这个方法,并设置`this.$emit('parentMethod', 参数)`触发事件。组件监听这个事件,接收返回值。 ```vue // 组件 <template> <div> <child-component :returnData="parentReturn" @parentMethod="handleParentResult"></child-component> </div> </template> <script> export default { methods: { handleParentResult(result) { this.parentReturn = result; } } }; </script> ``` 2. **自定义事件 (v-on:custom-event)** 或者 `@emit`: 组件直接通过`this.$emit('customEvent', 返回值)`发出事件,组件则通过`v-on:custom-event`或者`@customEvent="handleResult"`来监听并处理这个事件。 ```vue // 组件 <template> <button @click="callParentMethod">Call Parent Method</button> </template> <script> export default { methods: { callParentMethod() { const result = ...; // 这里计算返回值 this.$emit('customEvent', result); } } }; </script> ``` 3. **ref 和 props 的组合**: 组件可以用`ref`定义一个本地变量,然后将其暴露出去作为prop。组件可以在方法内部修改这个变量,组件通过`props`监听这个变化。 ```vue // 组件 <template> <div> <child-component :parentValue="valueRef" @updateFromChild="updateFromChild"></child-component> </div> </template> <script> import { ref } from 'vue'; export default { setup() { const valueRef = ref(null); ... methods: { updateFromChild(value) { valueRef.value = value; } } } }; </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值