如何解决自定义弹窗 visible prop 控制可见性失效的问题?

如何解决自定义弹窗 visible prop 控制可见性失效的问题?

如何控制自定义弹窗的可见性?

您在使用 dialog 组件时遇到了一个问题,即通过 visible prop 控制可见性。您在使用 v-if="visibleMe" 方式打开和关闭弹窗,但在关闭时将 visibleMe 设置为 false 不会触发监听 visible 的 watch。

解决方法是仅修改 dialog 组件的代码,具体如下:

修改后的 dialog 组件代码:

<template>
  <div v-if="visibleMe">
    <!-- 内容 -->
  </div>
</template>

<script>
export default {
  props: {
    visible: Boolean,
  },
  data() {
    return {
      visibleMe: this.visible, // 初始化 visibleMe 与 visible 相同
    };
  },
  watch: {
    visible(newVal) {
      this.visibleMe = newVal;
    },
  },
  methods: {
    closeDialog() {
      this.visibleMe = false;
      this.$emit('update:visible', false); // 手动触发 visible prop 的更新
    },
  },
};
</script>

修改后的工作原理:

  • 在构造函数中,将 visible 复制到 visibleMe 进行初始化。
  • 在 closeDialog 方法中,我们手动触发 visible prop 的更新,这是必需的,因为 visibleMe 的更改不会触发 watch。

以上就是如何解决自定义弹窗 visible prop 控制可见性失效的问题?的详细内容,更多请关注其它相关文章!