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
相关产品推荐
相关产品推荐

