vue多种弹框的弹出形式

本文探讨了Vue项目中使用Element-UI的el-dialog组件时遇到的加载与显示问题,包括如何正确地组织多个嵌套弹框组件以避免遮罩层覆盖导致的用户体验不佳,以及不同显示条件下的组件加载机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

demo地址:
1、父组件引入子组件,子组件的加载问题
products.vue引入dlAddProd弹框(dlAddProd.vue),由于<div v-show="visible">,所以在products页面加载时,dlAddProd会被加载。但是el-dialog中的body部分不会被加载(不管有没有加v-if指令);dlAddProd弹框中又引入了dlBlankAdd弹框和dlEditProd弹框,但此时只有dlBlankAdd会被加载,dlEditProd不会被加载(<div v-if="visible">);
图片描述

2、注意的地方
由于element-UI的弹框组件el-dialog在其body部分再加一个弹框B会导致在弹出弹框B的时候,B和父弹框同时被遮罩层遮住的问题(https://jsfiddle.net/Irene_Ta...,所以当需要实现在一个弹框A弹出弹框B的功能,最好是将这两个弹框并列写在一个文件中,如下:

<template>
  <div v-show="visibleA"> 或者v-if="visibleA" 或者不写
    <el-dialog v-model="visibleA" ref="dialogA"><el-dialog>
    <el-dialog v-model="visibleB" ref="dialogB"><el-dialog>
  </div>
</template>

当然,也可以将弹框B写成一个组件dialogB,然后引入,如下

<template>
  <div v-show="visibleA"> 或者v-if="visibleA" 或者不写
    <el-dialog v-model="visibleA" ref="dialogA"><el-dialog>
    <el-dialog v-model="visibleB" ref="dialogB"><el-dialog>
  </div>
</template>
<script>
  import dialogB from './dialogB.vue'
  export default {
    components: {
      dialogB
    }
  }
</script>

3、demo中出现的弹框形式
类型一:A弹框中弹出B弹框的类型
类型二:弹框body变换的类型 (点击A弹框的按钮之后,body由C变成D,但还是同一个弹框,并且此时弹框出现返回键,点击返回键,body又回到C,点击关闭键,弹框消失),不管是通过body C点击出来的弹框还是body D点击出来的弹框都应该和A弹框并列。
图片描述

你可以使用Vue的transition组件来实现点击按钮弹出的动画效果。具体实现步骤如下: 1. 在Vue组件中添加一个按钮,并为其绑定一个点击事件。 2. 在Vue组件中定义一个data属性,用于控制的显示和隐藏状态。 3. 使用Vue的transition组件包裹内容,并设置name属性。 4. 在transition组件中使用v-if指令控制的显示和隐藏。 5. 在transition组件中使用CSS样式定义的进入和离开动画效果。 以下是一个简单的示例代码: ```html <template> <div> <button @click="showModal = true">点击弹出</button> <transition name="modal"> <div class="modal-mask" v-if="showModal"> <div class="modal-wrapper"> <div class="modal-container"> <!-- 内容 --> <h3>这是一个!</h3> <p>点击右上角的X可以关闭。</p> </div> </div> </div> </transition> </div> </template> <script> export default { data() { return { showModal: false } } } </script> <style> .modal-mask { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.5); display: flex; justify-content: center; align-items: center; } .modal-wrapper { display: inline-block; background-color: #fff; border-radius: 4px; padding: 20px; } .modal-enter-active, .modal-leave-active { transition: opacity 0.3s; } .modal-enter, .modal-leave-to { opacity: 0; } </style> ``` 在上面的示例代码中,当点击按钮时,showModal属性的值会变为true,就会显示出来,同时触发进入动画效果。当点击右上角的X按钮关闭时,showModal属性的值会变为false,就会隐藏起来,同时触发离开动画效果。你可以根据自己的需求修改样式或动画效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值