vue element 右上角×关闭弹窗并清空表单校验信息

vue element UI el-dialog 如何监听右上角 x 关闭按钮并清空表单校验信息

先上图
在这里插入图片描述
需求:点击取消按钮和右上角的的×都要清空form表单的信息。
首先:点击取消按钮清空按钮的实现方法比较简单,不多说贴代码:

模板中代码:
<el-button @click="close('form')">取 消</el-button>

js代码:
  close(formName){
     var _this = this;
     _this.$refs[formName].resetFields();
     _this.dialogFormVisible = false;
  },

然后右上角element官方弹框组件给出的是,不多说贴代码:

<el-button type="text" @click="dialogVisible = true">点击打开 Dialog</el-button>

<el-dialog
  title="提示"
  :visible.sync="dialogVisible"
  width="30%"
  :before-close="handleClose">
  <span>这是一段信息</span>
  <span slot="footer" class="dialog-footer">
    <el-button @click="dialogVisible = false">取 消</el-button>
    <el-button type="primary" @click="dialogVisible = false">确 定</el-button>
  </span>
</el-dialog>

<script>
  export default {
    data() {
      return {
        dialogVisible: false
      };
    },
    methods: {
      handleClose(done) {
        this.$confirm('确认关闭?')
          .then(_ => {
            done();
          })
          .catch(_ => {});
      }
    }
  };
</script>

好了,为了把formName引入我们把:before-close="handleClose"改成:before-close="handleClose(‘form’)"带来的是项目报错。原因是handleClose里不可传参。那么该怎么办????
本人研究了好久最终搞定:不多说贴代码:

模板如下:
<el-dialog
      width="700px"
      style="text-align:left"
      :title="titleText"
      :visible.sync="dialogFormVisible"
      :close-on-click-modal="false"
      @close="reset('form')"
    >
      <el-form :model="form" :rules="rules" ref="form">
        <el-form-item label="父专题" label-width="80px">{{form.parentName}}</el-form-item>
        <el-form-item label="名称" label-width="80px" prop="name">
          <el-input v-model="form.name" auto-complete="off"></el-input>
        </el-form-item>
        <el-form-item label="次序" label-width="80px" prop="orderNum">
          <el-input-number
            style="width:40%"
            v-model="form.orderNum"
            @change="numberChange"
            :min="0"
            :max="100"
          ></el-input-number>
        </el-form-item>
        <el-form-item prop="picture" label-width="80px" label="图片">
          <el-upload
            class="avatar-uploader"
            action="/api/api/upload"
            :show-file-list="false"
            :headers="myheaders"
            :on-success="handleAvatarSuccess1"
            :before-upload="beforeAvatarUpload"
          >
            <img v-if="form.picture" :src="form.picture" class="avatar" />
            <i v-else class="el-icon-plus avatar-uploader-icon"></i>
          </el-upload>
          <span>{{form.tips}}</span>
        </el-form-item>

        <el-form-item label="关联菜品" prop="foodId" label-width="80px">
          <el-select
            style="width:100%;"
            class="serviceCharge"
            v-model="form.foodId"
            placeholder="请选择"
          >
            <el-option
              v-for="item in foods"
              :key="item.value"
              :label="item.label"
              :value="item.value"
            ></el-option>
          </el-select>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <!-- <el-button @click="dialogFormVisible = false">取 消</el-button> -->
        <el-button @click="close('form')">取 消</el-button>
        <el-button type="primary" @click="handleAdd('form')">{{buttonText}}</el-button>
      </div>
    </el-dialog>
脚本代码如下:
 reset(formName){
     var _this = this;
    this.$refs[formName].resetFields();
  }

不使用官方文档给出的before-close属性,而是使用close事件,问题迎刃热解!!!!!
搞定******搞定******搞定******搞定******搞定******搞定******搞定******搞定******搞定******搞定******搞定
在这里插入图片描述在这里插入图片描述在这里插入图片描述

### VueElement UI 表单验证规则及实现方法 #### 单个 `el-form-item` 添加验证 为了在特定的表单项上应用验证逻辑,在 `<el-form-item>` 组件内可以定义 `prop` 属性来关联数据模型字段,通过父级 `<el-form>` 的 `rules` 定义对应的验证规则[^1]。 ```html <el-form :model="ruleForm" :rules="rules"> <el-form-item label="活动名称" prop="name"> <el-input v-model="ruleForm.name"></el-input> </el-form-item> </el-form> ``` 上述代码片段展示了如何为名为 "活动名称" 的输入配置验证属性。这里,`prop` 值应与 `data()` 函数返回的对象内的键名相匹配以便建立联系。 #### 动态设置验证规则 对于更复杂的场景,可能需要基于某些条件动态调整验证规则。这可以通过监听事件或其他机制改变绑定到 `:rules` 上的数据结构达成[^2]。 ```javascript new Vue({ el: '#app', data() { return { ruleForm: {}, rules: {} }; }, created() { // 初始化或更新验证规则 this.updateDynamicRules(); }, methods: { updateDynamicRules() { const baseRule = [{ required: true, message: '此项必填', trigger: 'blur' }]; // 根据业务需求修改baseRule... Object.assign(this.rules, { name: baseRule }); } } }); ``` 此段 JavaScript 显示了怎样利用生命周期钩子函数 (`created`) 或其他自定义方法 (`updateDynamicRules`) 来初始化或更改现有的验证规则集。 #### 重置表单状态 当用户完成编辑提交成功后,通常希望清空整个表单以准备下一次交互。为此目的提供了内置的方法 `$refs.form.resetFields();` 可用来清除所有已填写的内容以及任何先前存在的错误提示信息[^3]。 ```html <!-- HTML --> <el-button @click="submitForm('ruleForm')">立即创建</el-button> <script> export default { methods: { submitForm(formName) { this.$refs[formName].validate((valid) => { if (valid) { alert('submit!'); // 提交后的处理逻辑... // 清除表单 this.$nextTick(() => { this.$refs[formName].resetFields(); }); } else { console.log('error submit!!'); return false; } }); } } } </script> ``` 这段脚本说明了如何结合验证过程和清理动作一起工作,确保用户体验流畅的同时保持界面整洁有序。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值