vue3-对Element Plus中的Form表单进行resetFields重置

vue3-对Element Plus中的Form表单进行resetFields重置

官方文档
在这里插入图片描述
在这里插入图片描述
参考官网的示范代码:
在这里插入图片描述

<template>
  <el-form
    ref="formRef"
    :model="numberValidateForm"
    label-width="100px"
    class="demo-ruleForm"
  >
    <el-form-item
      label="age"
      prop="age"
      :rules="[
        { required: true, message: 'age is required' },
        { type: 'number', message: 'age must be a number' },
      ]"
    >
      <el-input
        v-model.number="numberValidateForm.age"
        type="text"
        autocomplete="off"
      />
    </el-form-item>
    <el-form-item>
      <el-button type="primary" @click="submitForm(formRef)">Submit</el-button>
      <el-button @click="resetForm(formRef)">Reset</el-button>
    </el-form-item>
  </el-form>
</template>

<script lang="ts" setup>
import { reactive, ref } from 'vue'
import type { FormInstance } from 'element-plus'

const formRef = ref<FormInstance>()

const numberValidateForm = reactive({
  age: '',
})

const submitForm = (formEl: FormInstance | undefined) => {
  if (!formEl) return
  formEl.validate((valid) => {
    if (valid) {
      console.log('submit!')
    } else {
      console.log('error submit!')
      return false
    }
  })
}

const resetForm = (formEl: FormInstance | undefined) => {
  if (!formEl) return
  formEl.resetFields()
}
</script>

在这里插入图片描述
项目中写的代码

<template>
    <el-form :model="form" ref="formRef">
        <el-form-item label="姓名:" :label-width="formLabelWidth" prop='name'>
            <el-input v-model="form.name" autocomplete="off" />
        </el-form-item>
        <el-form-item label="年龄:" :label-width="formLabelWidth" prop='age'>
            <el-input v-model="form.age" autocomplete="off" />
        </el-form-item>
        <el-form-item label="性别:" :label-width="formLabelWidth" prop='gender'>
            <el-select v-model="form.gender" placeholder="请选择性别">
                <el-option v-for="item in genderOptions" :key="item.value" :label="item.label"
                    :value="item.value"></el-option>
            </el-select>
        </el-form-item>
        <el-form-item label="图片:" :label-width="formLabelWidth" prop='imagePath'>
            <el-upload v-model="form.imagePath" class="avatar-uploader"
                action="https://7101v4b133.zicp.fun/images/uploadImages" :show-file-list="false" :on-success="handleUpImage"
                list-type="picture" accept="image/*">
                <!-- 如果图片列表里面已经提交了图片地址则显示已提交的图片 -->
                <img v-if="form.imagePath" :src="form.imagePath" class="avatar" />
                <!-- 如果图片列表里面没有图片地址则显示显示上传按钮 -->
                <el-icon v-else class="avatar-uploader-icon">
                    <Plus />
                </el-icon>
            </el-upload>
        </el-form-item>
        <div class="dialog-footer">
            <el-button @click="resetForm(formRef)">取消</el-button>
            <el-button type="primary" @click="addStudentsInfo(formRef)">
                确认
            </el-button>
        </div>
    </el-form>
</template>

<script setup lang="ts">

import api from '@/assets/api';
import { ElMessage } from 'element-plus'
import { onMounted, reactive, ref } from 'vue'
import type { FormInstance } from 'element-plus'
import { Plus } from '@element-plus/icons-vue'
import type { StudentInfoT } from '@/type'; 

const formLabelWidth = '140px'
const formRef = ref<FormInstance>()
// 新增学生数据
const form = reactive({
    name: '',
    age: '',
    gender: '',
    imagePath: '',
} as StudentInfoT);
// 选择性别的选择数据
const genderOptions = [
    {
        value: '男',
        label: '男',
    },
    {
        value: '女',
        label: '女',
    }
]
// 上传图片
const handleUpImage = (res: any) => {
    form.imagePath = res.data[0]
}
//=============

// 取消新增
const resetForm = (formEl: FormInstance | undefined) => {
    if (!formEl) return
    formEl.resetFields()
}

const addStudents = async (params: any) => {
    const result = await api.addStudents(params);
    if (result.code === 1) {
        ElMessage({
            message: '新增成功!',
            type: 'success',
        })
    } else {
        ElMessage.error('新增失败!')
    }
}
const addStudentsInfo = (formEl: FormInstance | undefined) => {
    if (!formEl) return
    formEl.validate((valid) => {
        if (valid) {
            addStudents(form)
            formEl.resetFields()
        } else {
            console.log('error submit!')
            formEl.resetFields()
            return false
        }
    })
}

</script>

<style scoped>
.avatar-uploader .avatar {
    width: 140px;
    height: 140px;
    display: block;
}

.el-form {
    margin: 10px auto;
    width: 600px;
}

.el-form-item {
    display: flex;
    justify-content: center;
}

.el-input {
    width: 400px;
}

.dialog-footer {
    margin: 40px auto;
    margin-left: 140px;
}

.dialog-footer button:first-child {
    margin-right: 80px;
}

.avatar-uploader .avatar {
    width: 140px;
    height: 140px;
    display: block;
}
</style>
<style>
.avatar-uploader .el-upload {
    border: 1px dashed var(--el-border-color);
    border-radius: 6px;
    cursor: pointer;
    position: relative;
    overflow: hidden;
    transition: var(--el-transition-duration-fast);
}

.avatar-uploader .el-upload:hover {
    border-color: var(--el-color-primary);
}

.el-icon.avatar-uploader-icon {
    font-size: 28px;
    color: #8c939d;
    width: 140px;
    height: 140px;
    text-align: center;
}
</style>
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,下面是一个简单的示例: 1. 首先安装 vue3 和 element-plus: ``` npm install vue@next npm install element-plus ``` 2. 在组件引入需要的 element-plus 组件和相关方法: ```javascript <template> <el-form :model="form" :rules="rules" ref="form" label-width="80px" class="demo-ruleForm"> <el-form-item label="用户名" prop="username"> <el-input v-model="form.username"></el-input> </el-form-item> <el-form-item label="密码" prop="password"> <el-input type="password" v-model="form.password"></el-input> </el-form-item> <el-form-item> <el-button type="primary" @click="submitForm('form')">提交</el-button> <el-button @click="resetForm('form')">重置</el-button> </el-form-item> </el-form> </template> <script> import { defineComponent } from 'vue'; import { ElForm, ElFormItem, ElInput, ElButton } from 'element-plus'; import { useForm } from '@ant-design-vue/use'; export default defineComponent({ components: { ElForm, ElFormItem, ElInput, ElButton, }, setup() { const { form, resetFields, validate } = useForm({ username: '', password: '', }); const rules = { username: [ { required: true, message: '请输入用户名', trigger: 'blur' }, { min: 3, max: 10, message: '长度在 3 到 10 个字符', trigger: 'blur' }, ], password: [ { required: true, message: '请输入密码', trigger: 'blur' }, { min: 6, max: 20, message: '长度在 6 到 20 个字符', trigger: 'blur' }, ], }; const submitForm = async () => { try { await validate(); console.log('submit!'); } catch (error) { console.log('error', error); } }; const resetForm = () => { resetFields(); }; return { form, rules, submitForm, resetForm, }; }, }); </script> ``` 3. 在 setup() 函数使用 @ant-design-vue/use 提供的 useForm() 方法创建表单对象,并定义相关规则。使用 validate() 方法进行表单验证,validate() 方法返回一个 Promise,如果验证通过,则 resolve,否则 reject 并返回错误信息。 以上示例,我们使用了 element-plus 的 ElForm、ElFormItem、ElInput、ElButton 组件,以及 vue3 的 defineComponent() 和 setup() API。 希望这个示例对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值