为什么总是出现对话框第一次打开,表单无值,但第二次打开表单有值的情况?
- props 传过来的数据 在 Vue 的响应式系统在处理这些异步操作时可能会出现时序问题。第一次打开时,currentData 的更新可能还没有完成,watch 就已经执行了。可以使用 nextTick 确保数据更新和对话框打开的顺序。
- immediate: true 确保 watch 在组件挂载时就执行,不会错过初始数据。
- 后续打开时,由于数据已经存在,watch 会立即响应数据的变化。
watch(() => props.currentData, (newVal) => {
if (newVal && Object.keys(newVal).length > 0) {
isEdit.value = true
Object.assign(formState, newVal)
} else {
isEdit.value = false
resetForm()
}
}, { deep: true, immediate: true })
const showEditDialog = (item) => {
currentDialogComponent.value = dialogComponents[currentComponentType]
nextTick(() => {
currentData.value = { ...item }
open.value = true
})
}