Vue Dialog 中el-select 和el-date-picker选择后不展示选中内容,遇坑记录

Vue Dialog 中el-select 和el-date-picker选择后不展示选中内容,遇坑记录

直接放代码

    <div class="searchBox" :style="{ width: searchBoxWidth }">
      <div class="inputBox" v-for="(item, index) in searchArr" :key="index">
        <span>{
  { item.name }}:</span>
        <!-- <input type="text" v-model="searchObj.name" style="width: 140px" /> -->
        <el-input
          v-model="searchObj[item.field]"
          :style="{ width: item.width ? item.width : '140px' }"
          v-if="item.type == 1"
        >
        </el-input>
        <el-select
          v-if="item.type == 2"
          v-model="searchObj[item.field]"
          :placeholder="item.placeholder ? item.placeholder : ''"
### Element-UI 中 `el-dialog` 组件闪屏问题分析与解决方案 #### 一、问题原因 在使用 `el-dialog` 组件时,出现闪屏的现象可能由多种因素引起。以下是常见的几种情况及其成因: 1. **点击事件触发重绘** 当在 `el-dialog` 内部使用交互控件(如 `el-select` 或 `el-radio`),这些控件的点击操作可能会触发布局重新计算或滚动条的变化,从而导致页面短暂刷新或闪烁[^1]。 2. **动画效果冲突** 在某些浏览器环境下(尤其是 Internet Explorer),默认的关闭动画可能导致弹窗关闭瞬间出现视觉上的闪烁。这是由于动画时间渲染机制匹配所致[^2]。 3. **遮罩层引起的布局变化** 打开 `el-dialog` 后会生成一个遮罩层,如果页面内容的高度发生变化或者存在溢出隐藏 (`overflow: hidden`) 的设置,则可能导致页面整体布局调整,进而引发抖动或闪屏现象[^3]。 4. **多弹窗切换逻辑当** 如果项目中有多个 `el-dialog` 并且它们之间需要快速切换,在未合理处理显示/隐藏顺序的情况下,也可能造成界面闪烁的效果[^4]。 5. **日期选择器附加到错误节点** 使用 `el-date-picker` 等复杂输入组件时,默认情况下其浮层会被追加至文档根节点而非父容器内部。这种行为有时会引起定位偏差甚至崩溃式的闪退问题[^5]。 --- #### 二、具体解决办法 针对上述每种可能性提供相应的修复措施如下: ##### 方法一:优化点击事件影响 对于因为表单控件交互而产生的闪现状况,可以通过监听特定事件并阻止冒泡来缓解该症状: ```javascript this.$refs.select.blur(); // 主动失去焦点减少干扰 ``` 另外还可以尝试禁用自动滚定功能以维持稳定视图状态: ```css body { overflow-y: auto !important; } ``` ##### 方法二:修改关闭动画配置 为了消除 IE 浏览器中的特殊表现形式,建议按照以下方式自定义 CSS 类名覆盖原有过渡规则: ```scss /* 设置退出时间为零 */ .el-dialog__wrapper.dialog-no-transition { .dialog-fade-enter-active, .dialog-fade-leave-active { transition-duration: 0s !important; } } // 应用于实例创建前全局注册样式 Vue.prototype.$ELEMENT = { size: 'small', zIndex: 3000 }; import '@/styles/dialog-fix.scss'; // 假设路径如此设定 ``` ##### 方法三:修正遮挡层作用范围 通过新增额外 class 来精确控制何时应用何种 margin/padding 调整策略,避免必要的宽高改变: ```html <el-dialog :visible.sync="isShow" custom-class="fixed-margin"> </el-dialog> ``` 配合对应的 SCSS 文件编写: ```scss .fixed-margin { padding-right: calc(17px + env(safe-area-inset-right)); /* 动态适配安全区域 */ @media (max-width: 768px) { max-height: 90vh; overflow-y: scroll; } } ``` ##### 方法四:延时管理可见性转换过程 当涉及频繁开启关闭同模态窗口场景下,适当引入定时器间隔有助于平滑衔接动作流程: ```javascript openNextDialog() { this.nextVisible = true; setTimeout(() => { this.currentVisible = false; }, 300); // 根据实际需求调节数值大小 } ``` ##### 方法五:指定日期挑选手臂挂载位置 最后关于日历插件异常退出的情况,只需简单声明参数即可规避风险: ```vue <el-date-picker v-model="dateValue" append-to-body="true"></el-date-picker> <!-- 将值改为 true 即可 --> ``` --- ### 总结 综上所述,Element UI 提供的强大灵活性同时也带来了些许兼容性性能方面的挑战。以上列举了几项常见诱因以及对应处置手段,开发者可以根据具体情况灵活选用合适的组合拳出击解决问题。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值