Vue父子组件交互

84 阅读1分钟

为什么总是出现对话框第一次打开,表单无值,但第二次打开表单有值的情况?

  1. props 传过来的数据 在 Vue 的响应式系统在处理这些异步操作时可能会出现时序问题。第一次打开时,currentData 的更新可能还没有完成,watch 就已经执行了。可以使用 nextTick 确保数据更新和对话框打开的顺序。
  2. immediate: true 确保 watch 在组件挂载时就执行,不会错过初始数据。
  3. 后续打开时,由于数据已经存在,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;
    });
};