关于控制模态框的显示隐藏的另外的思路

来源:2-6 图标选择器-巧用两次watch控制弹框的显示与隐藏

慕妹6057678

2023-10-26

老师,关于控制模态框的显示隐藏有另外的思路:1. 不用v-model="visible"去控制模态框的显示隐藏,改用model-value="visible",这样就不会直接修改props ; 2.利用el-dialogbefore-close属性监听关闭模态框,在事件回调中,不执行默认的done方法,而是执行自定义的更新visible props的方法handleClickBtn,即实现正常的显示隐藏模态框。

<template>
  <el-button type="primary" @click="handleClickBtn">
    选择图标
    <slot></slot>
  </el-button>

  <el-dialog
    :model-value="visible"
    :title="title"
    width="30%"
    :before-close="handleClose"
  >
    <span>This is a message</span>
  </el-dialog>
</template>

<script setup lang="ts">
const props = defineProps<{
  visible: boolean;
  title: string;
}>();
const emits = defineEmits<{
  (event: "update:visible", visible: boolean): void;
}>();

const handleClickBtn = () => {
  emits("update:visible", !props.visible);
};
const handleClose = (done: () => void) => {
  // 直接执行done()会导致props.visible的值没有更新
  handleClickBtn();
  // done();
};
</script>

<style scoped lang="less"></style>

写回答

1回答

五月的夏天

2023-10-26

可以的,不过最好的方法是在内部定义一个方法直接控制显隐,然后通过defineExpose暴露出去,父组件直接调用这个方法,

0
2
五月的夏天
回复
irebirth
这个visible就定义在组件内部了,不是父组件传进来的,
2023-10-31
共2条回复

基于Vue3+Vite+TS,二次封装element-plus业务组件

集成大量实际样例,系统掌握前沿技术栈与二次组件库封装能力

447 学习 · 185 问题

查看课程