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

Dialog关闭后v-for渲染的列表二次打开不显示问题求助

问题解决:Dialog中v-navigation-drawer二次打开列表不显示

问题分析

首次打开包含v-navigation-drawer的Dialog时,dataList渲染的列表显示正常;关闭Dialog后再次打开,列表无法加载。核心原因是Dialog组件复用导致内部v-navigation-drawer的状态未正确重置——Vue会复用未销毁的组件实例,而v-navigation-drawer在隐藏后没有触发重新渲染。

解决方案

方案1:给Dialog加动态key强制重新渲染

通过给v-dialog绑定与显示状态关联的key,让Vue在Dialog每次打开时销毁旧实例、创建新实例,确保v-navigation-drawer完全重新初始化:

<v-dialog v-model="dialog" :key="dialog">
  <v-navigation-drawer floating height="140px" class="w-100">
    <!-- 你的列表代码 -->
  </v-navigation-drawer>
</v-dialog>

当dialog从false切换为true时,key值变化,Vue会重新渲染整个Dialog及其内部组件,列表就能正常读取dataList并渲染。

方案2:Dialog打开时手动触发列表更新

在Dialog的打开事件中,手动触发组件更新或重置dataList的响应式状态:

<v-dialog v-model="dialog" @click:open="refreshList">
  <!-- 你的导航抽屉代码 -->
</v-dialog>

对应的方法实现:

methods: {
  refreshList() {
    // 方式1:强制组件更新
    this.$forceUpdate();
    // 方式2:解构赋值触发dataList响应式更新
    // this.dataList = [...this.dataList];
  }
}

方案3:优化v-for的key值

把v-for的key从index改为数据项的唯一标识(比如eid),避免索引复用导致的渲染异常:

<v-list-item v-for="desc in dataList" :key="desc.eid" @click="getDesc(desc)">
  <v-list-item-action-text class="pe-4">{{ desc.title }}</v-list-item-action-text>
  <!-- 其他列表项内容 -->
</v-list-item>

效果验证

应用方案1后,再次打开Dialog时,v-navigation-drawer会重新初始化,列表将恢复正常显示,与首次打开效果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 08:25:27