上班日记3——vue3爷,父,子在script setup下的defineEmits,事件命名等均无问题,但依旧不能触发爷组件方法

文章讨论了在Vue3项目中,作者遇到组件间通过`defineEmits`进行异步通信的问题,怀疑是由于回调函数位置导致的。提出两种解决方案:一是子组件触发父组件的方法,二是保持原有结构并调整emit的位置。
摘要由CSDN通过智能技术生成

上代码

1、爷组件中:

<opItem :row="row" :jumpPath="'/costcontrol/template/detail/'+row.id"
@handleBinduser="handleBinduser"/>

<script setup>
 const handleBinduser = async () =>{
    console.log(123123);
    await initPage()
  }

2、父组件——也就是爷组件中的opItem:

<script setup>

const emits = defineEmits(['handleBinduser'])

const 方法 =(item) =>{
    子组件({
        callback: async res={
             emits('handleBinduser')
        }
    })
}

根据我的一贯作风,我首先认为:

        1、vue3也是这个新工作才接触,是不是我的defineEmits使用的有问题       

        2、可能需要驼峰命名

        3、使用nexTtick试试——都成习惯了,经常类似的问题都是如此,实际上emit通信因为nexttick而出问题感觉没有,但是不知道有没有特定情况

根据我的一贯作风,上述猜想都不是,其实原因猜测是:

1、callback是子组件的,放在孙子组件的回调中可能是子组件寻找const emits来触发父组件中的handleBinduser,但是我们定的是父组件中触发爷组件,所以如果你log(emits('handleBinduser'))会是undifind

2、待我研究

解决方案:

1、子组件内使用defineEmits,父组件内设置handleBinduser方法,让子触发父

弊端嘛就是,太麻烦了,本来就是父和爷组件,现在还要多一个子触发父,而且公用的一个子组件,懒得写

2、感觉这样舒服

爷组件中:

<opItem :row="row" :jumpPath="'/costcontrol/template/detail/'+row.id"
@handleBinduser="handleBinduser"/>

<script setup>
 const handleBinduser = async () =>{
        子组件({
        callback: async res={
             await initPage()
        }
    })
  }

父组件——也就是爷组件中的opItem:

<script setup>

const emits = defineEmits(['handleBinduser'])

const 方法 =(item) =>{
    emits('handleBinduser')
}

 黑暗笼罩万物,我将是黑暗中最后的那道曙光,以雷霆,击碎黑暗

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值