vue3+elemeng-plus表单校验及resetFields使用

vue3+element-plus表单验证与登录

<template>
    <div>
        <el-form
            label-width="100px"
            ref="formlabelref"
            :rules="rules"
            :model="formlabel"
            style="width: 60%;margin:0 auto"
            class="demo-ruleForm"
        >
            <el-form-item label="Name" prop="name">
                <el-input v-model="formlabel.name"></el-input>
            </el-form-item>
            <el-form-item label="Password"  prop="password">
                <el-input v-model="formlabel.password"></el-input>
            </el-form-item>
            <el-form-item>
                <el-button type="primary" @click="submit">Query</el-button>
                <el-button @click="reset">Reset</el-button>
            </el-form-item>
        </el-form>
    </div>
</template>

<script lang='ts'>
import { defineComponent, ref, unref } from 'vue'
import { userlogin } from '../utils/api'
import {throttle} from '../utils/util'
import {
    ElMessage
} from 'element-plus';

export default defineComponent({
    name: 'login',
    setup() {
        let formlabelref = ref()
        let formlabel = ref({
            name: '',
            password: '',
        })
        let rules= ref({
            name: [
            {
                required: true,
                message: 'Please input name',
                trigger: 'blur',
            }
            ],
            password: [
            {
                required: true,
                message: 'Please input password',
                trigger: 'blur',
            },
            ],
        }) 
        const submittemp = () => {
            const form = unref(formlabelref)
            form.validate((valid)=>{
                if(!valid){
                    return ElMessage.error('用户名或密码未输入')
                }else{
                    userlogin(form.model).then(res => {
                        if (res.code === 200) {
                            ElMessage.success(res.msg);
                        } else {
                            ElMessage.error(res.msg);
                        }
                    })
                }
                
            })
        }
        const submit = throttle(submittemp,3000)
        const reset =  () => {
            const form = unref(formlabelref)
            form.resetFields()
        }
        return {
            rules,
            formlabel,
            formlabelref,
            submit,
            reset
        }
    }
})
</script>

<style lang='less'>
</style>
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 3中,可以使用 `v-for` 指令和 `provide/inject` API 来实现父组件校验多个子组件的表单。 首先,在子组件中定义一个表单对象,并且使用 `provide` API将表单对象提供给父组件,例如: ``` <template> <el-form :model="form"> ... </el-form> </template> <script> import { provide } from 'vue'; export default { data() { return { form: { ... } } }, mounted() { provide('form', this.form); } } </script> ``` 然后,在父组件中使用 `v-for` 指令和 `inject` API 获取所有子组件的表单对象,例如: ``` <template> <el-form ref="parentForm"> <child-form v-for="(item, index) in items" :key="index"></child-form> ... </el-form> </template> <script> import { inject } from 'vue'; export default { data() { return { items: [...] } }, methods: { validateChildForms() { const childForms = this.items.map((item, index) => { return inject('form', null, true /* throw error if not found */); }); let isValid = true; for (const childForm of childForms) { if (!childForm.validate()) { isValid = false; } } return isValid; } } } </script> ``` 上述代码中,子组件在 `mounted` 钩子函数中使用 `provide` API将表单对象提供给父组件,父组件使用 `v-for` 指令渲染多个子组件,并且使用 `inject` API获取子组件的表单对象。然后,在父组件中的 `validateChildForms` 方法中,遍历所有子组件的表单对象进行校验。 需要注意的是,这里使用 `inject` API 的第三个参数为 `true`,表示如果没有找到提供的表单对象,则会抛出错误。如果子组件没有提供表单对象,或者表单对象提供的名称不是 `form`,则会抛出错误。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值