You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue3组件emit中能否获取v-for循环的multigate实例?

解决方案

一、获取v-for循环中的multigate实例

完全可以,两种简单实现方式如下:

方式1:父组件绑定事件时传递multigate

修改父组件的事件绑定逻辑,通过箭头函数把当前循环的multigate作为额外参数传入处理函数:

<li v-for="multigate in store.availableMultigates">
  <Multigate :multigate="multigate" @antennas="(connectedAntennas) => showAntennas(connectedAntennas, multigate)" />
</li>

对应的处理函数接收两个参数即可拿到multigate:

const showAntennas = (connectedAntennas, multigate) => {
  console.log(connectedAntennas);
  console.log(multigate); // 此处获取当前循环的multigate实例
}

方式2:子组件触发事件时携带multigate参数

子组件已通过props接收multigate,触发事件时直接将其作为第二个参数传出:

// 子组件内部代码
emit('antennas', connectedAntennas.value, multigate);

父组件处理函数直接接收两个参数:

const showAntennas = (connectedAntennas, multigate) => {
  console.log(connectedAntennas);
  console.log(multigate);
}

二、关于访问this

分两种场景说明:

  • Vue3组合式API(setup语法):直接定义的showAntennas函数内没有this,因为setup执行时组件实例尚未完全初始化,this指向undefined。若需访问组件实例上下文,可使用getCurrentInstance()(注意这是Vue内部API,不推荐生产环境随意使用):
    import { getCurrentInstance } from 'vue';
    
    const instance = getCurrentInstance();
    const showAntennas = (connectedAntennas) => {
      console.log(instance); // 此处获取组件实例,可替代this的部分功能
    }
    
  • Vue选项式API:把showAntennas写在methods选项中,即可正常访问this(指向当前组件实例):
    export default {
      methods: {
        showAntennas(connectedAntennas) {
          console.log(this); // 指向当前组件实例
        }
      }
    }
    

内容的提问来源于stack exchange,提问作者DuchSuvaa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 01:13:20