当前位置: 首页 > news >正文

Vue 表单优化:下拉框值改变前的确认提示与还原逻辑实现

在开发表单类功能时,我们经常需要对用户的重要操作进行确认提示,以避免误操作导致的数据丢失或错误。本文将通过一个实际案例,介绍如何在 Vue 中实现下拉框值改变前的确认提示,并在用户取消操作时还原原始值。

场景描述

在项目中,我们有一个表单,其中包含一个下拉框(el-select),用户可以选择不同的类型。由于切换类型是一个重要的操作,可能会导致页面上其他数据的清空或改变,因此我们需要在用户切换类型时弹出确认提示框。如果用户确认切换,则提交新值并清空相关数据;如果用户取消切换,则保留原始值,下拉框显示不变。

实现思路

为了实现这一功能,我们需要解决以下两个关键问题:

  1. 获取下拉框改变前的值:在 el-selectchange 事件中,我们可以通过 this.$refs 获取到改变前的值。

  2. 根据用户的选择决定是否更新值:通过 this.$confirm 提示用户,根据用户的确认或取消操作,决定是否更新下拉框的值。

代码实现

以下是完整的代码实现,包括 HTML 结构和 JavaScript 逻辑。

HTML 部分

<template>
  <el-row type="flex" justify="space-between">
    <el-col :span="11">
      <el-form-item label="名称" prop="name">
        <el-input
          maxlength="50"
          show-word-limit
          v-model="dialogForm.name"
          clearable
          :disabled="isViewDialog"
        ></el-input>
      </el-form-item>
    </el-col>
    <el-col :span="11">
      <el-form-item label="类型" prop="type">
        <el-select
          style="width: 100%"
          ref="typeRef"
          @change="changeType"
          v-model="dialogForm.type"
          size="small"
        >
          <el-option
            v-for="item in typelist"
            :key="item.value"
            :label="item.label"
            :value="item.value"
          ></el-option>
        </el-select>
      </el-form-item>
    </el-col>
  </el-row>
  <el-row type="flex" justify="space-between">
    <el-col :span="11">
      <el-form-item label="添加方式" prop="way">
        <el-input v-model="dialogForm.way" clearable></el-input>
      </el-form-item>
    </el-col>
    <el-col :span="11">
      <el-form-item label="添加时间" prop="time">
        <el-date-picker
          style="width: 100%"
          v-model="dialogForm.time"
          type="datetime"
          placeholder="选择日期时间"
        ></el-date-picker>
      </el-form-item>
    </el-col>
  </el-row>
</template>

JavaScript 部分

export default {
  data() {
    return {
      dialogForm: {
        name: "",
        type: null,
        way: "",
        time: null,
      },
      typelist: [
        { value: 1, label: "类型一" },
        { value: 2, label: "类型二" },
        { value: 3, label: "类型三" },
        { value: 4, label: "类型四" },
      ],
      isViewDialog: false,
    };
  },
  methods: {
    changeType(newVal) {
      const preValue = this.$refs.typeRef.value; // 获取改变前的值
      console.log(newVal, preValue, "类型改变");

      this.$confirm(
        "切换类型将清空当前页面添加方式和添加时间数据,是否继续切换?",
        "提示",
        {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning",
        }
      )
        .then(() => {
          // 用户确认切换
          this.$refs.typeRef.blur(); // 失焦,关闭下拉框
          this.dialogForm.way = ""; // 清空添加方式
          this.dialogForm.time = null; // 清空添加时间
        })
        .catch(() => {
          // 用户取消切换
          this.dialogForm.type = preValue; // 还原原始值
          this.$refs.typeRef.blur(); // 失焦,关闭下拉框
        });
    },
  },
};

关键点解析

  1. 获取原始值

    • changeType 方法中,通过 this.$refs.typeRef.value 获取到下拉框改变前的值。这是因为 el-selectchange 事件触发时,v-model 绑定的值已经更新为新值,而 this.$refs.typeRef.value 仍然保留了原始值。

  2. 确认提示

    • 使用 this.$confirm 弹出确认框,根据用户的操作决定是否更新下拉框的值。如果用户点击“确定”,则清空相关数据并保留新值;如果用户点击“取消”,则将下拉框的值还原为原始值。

  3. 失焦处理

    • 在确认或取消操作后,调用 this.$refs.typeRef.blur() 关闭下拉框,避免下拉框一直展开影响用户体验。

总结

通过上述实现,我们成功地在 Vue 中实现了下拉框值改变前的确认提示功能,并在用户取消操作时还原了原始值。这种实现方式不仅提升了用户体验,还避免了因误操作导致的数据丢失。希望本文的介绍能对你在开发中遇到类似问题提供帮助。

相关文章:

  • C++ 的时间库之六:日历和时区
  • ArcGIS Pro技巧实战:高效矢量化天地图地表覆盖图
  • 使用python做http代理请求
  • Metal学习笔记八:纹理
  • Springboot基础篇(3):控制反转与Bean对象
  • 深度生成模型(二)——基本概念与数学建模
  • 4. 示例:创建带约束的随机地址生成器(范围0x1000-0xFFFF)
  • Vue+Element UI table表格,数据展示错位(已解决)
  • Gatling介绍
  • ArcGIS Pro可见性分析:精通地形视线与视域分析
  • 力扣-动态规划-139 单词拆分
  • 接上文 延申应用 halcon及代码
  • C#装箱拆箱机制详解
  • 可编辑73页PPT | DeepSeek自学手册-从理论模型训练到实践模型应用
  • Express + MongoDB 实现更新用户时用户名变化验证数据库是否存在,不变不验证
  • 使用Vue-Flow创建一个流程图可视化节点坐标查询器
  • SikuliX使用
  • java泛型是对范型参数类型的擦除
  • 自然语言处理:文本规范化
  • GDidees CMS v3.9.1本地文件泄露漏洞(CVE-2023-27179)
  • 商业合作及运营方案/免费的关键词优化工具
  • 接效果图做网站/二十条优化措施
  • 佛山网站优化运营/一键清理加速
  • 怎么样可以建设网站/自己做网站需要什么条件
  • 网站做简介/百度大搜
  • 西安免费做网站公司/网上全网推广