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

Vue3组合API中列表传递给模态框的对象属性不显示

问题解决:Vue3 Composition API下模态框字段为空的响应式问题

问题根源

你遇到的问题确实和Vue3的响应式模型有关:模态框组件中,selectedItem是用reactive创建的响应式对象,但在showModal方法里直接执行selectedItem = cloneDeep(item),这会切断原响应式引用。

reactive的响应式是绑定在初始创建的对象上的,当你给selectedItem变量重新赋值时,它会指向一个cloneDeep生成的普通对象(非响应式代理),模板中的绑定无法追踪这个新对象的变化,所以字段显示为空。

修复方案

有两种可靠的修复方式:

方案1:用Object.assign合并属性(保留原响应式对象)

修改模态框组件的showModal方法,不要直接替换selectedItem,而是把新对象的属性合并到原响应式对象中:

import { cloneDeep } from 'lodash'; // 确保已引入cloneDeep

function showModal(item) {
  const clonedItem = cloneDeep(item);
  // 合并属性到原响应式对象,保留响应式
  Object.assign(selectedItem, clonedItem);
  isModalVisible.value = true;
}

方案2:将selectedItem改为ref(支持重新赋值)

如果更倾向于直接赋值的写法,可以把reactive换成ref,因为ref的响应式是通过.value维护的,重新赋值不会丢失响应性:

// 替换原selectedItem的定义
const selectedItem = ref({
  fbReqtypeid: '',
  listItem: '',
  type: '',
  link: '',
  digits: '',
  typeName: '',
  genericName: '',
  singleLineText: '',
  multiLineText: ''
})

// 修改showModal方法
function showModal(item) {
  selectedItem.value = cloneDeep(item);
  isModalVisible.value = true;
}

// 模板中不需要修改,Vue会自动解包ref

额外验证

修复后,可以在showModal方法里打印selectedItem,确认它仍然是Vue的响应式代理对象(方案1)或ref对象(方案2),这样模板就能正确渲染字段值了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 15:35:28