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

Vuetify3中菜单项向Dialog传递错误Prop的问题求助

Vuetify3中菜单项向Dialog传递错误Prop的问题求助

各位好,我正在做一个Vuetify3的示例项目,核心是想把各种调用对话框的方法都摸透,等搞定了还打算传到GitHub上,让其他刚接触Vuetify的同学也能参考学习。

目前大部分功能都跑起来了,但有个问题卡了我好半天,实在摸不着头脑来求助大家。我做了一个由v-model控制显示状态的自定义对话框组件,它有两种触发方式:一种是主组件上的普通按钮,另一种是主组件里下拉菜单的某个菜单项。

现在的诡异情况是:通过按钮触发对话框时,给组件传递的Prop完全符合预期,对话框能正确拿到对应的值;但用菜单项触发的话,Prop就不对了——要么传的是旧值,要么干脆就是不符合我设置的内容。

我已经试过好几种排查方法了:

  • 把菜单项的点击逻辑和按钮的统一抽成了同一个方法,结果还是不行
  • 单独打印菜单项点击时的参数,发现参数是对的,但更新Prop后打开对话框,对话框里拿到的还是错的
  • 甚至试过给对话框的显示状态加个延迟,依然没解决问题

我把简化后的核心代码贴出来,大家帮我看看哪里出了问题:

主组件里的菜单和按钮部分:

<v-menu>
  <template v-slot:activator="{ props }">
    <v-btn v-bind="props">打开操作菜单</v-btn>
  </template>
  <v-list>
    <v-list-item @click="handleOpenDialog('menu-triggered')">
      <v-list-item-title>从菜单打开对话框</v-list-item-title>
    </v-list-item>
  </v-list>
</v-menu>

<v-btn class="ml-4" @click="handleOpenDialog('button-triggered')">从按钮打开对话框</v-btn>

<!-- 自定义对话框组件 -->
<CustomDialog 
  v-model="dialogVisible" 
  :trigger-source="currentTriggerSource" 
/>

对应的script部分:

<script setup>
import CustomDialog from './CustomDialog.vue'
import { ref } from 'vue'

const dialogVisible = ref(false)
const currentTriggerSource = ref('')

const handleOpenDialog = (source) => {
  currentTriggerSource.value = source
  console.log('当前触发源:', source) // 这里打印的内容是对的
  dialogVisible.value = true
}
</script>

自定义对话框组件的核心代码:

<template>
  <v-dialog v-model="modelValue">
    <v-card>
      <v-card-title>对话框标题</v-card-title>
      <v-card-text>
        触发来源:{{ triggerSource }}
      </v-card-text>
      <v-card-actions>
        <v-btn @click="modelValue = false">关闭</v-btn>
      </v-card-actions>
    </v-card>
  </v-dialog>
</template>

<script setup>
const props = defineProps({
  modelValue: Boolean,
  triggerSource: String
})

const emit = defineEmits(['update:modelValue'])
</script>

按道理说,按钮和菜单调用的是同一个方法,参数也传对了,为什么对话框里拿到的triggerSource在菜单触发时总是不对呢?有没有同学遇到过类似的问题,或者能帮我指出哪里考虑不周?

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 13:14:36