vue实现表单单独移除一个字段验证

 更新时间:2022年03月21日 09:04:04   作者:friend_ship  
这篇文章主要为大家详细介绍了vue实现表单单独移除一个字段验证,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了vue实现表单单独移除一个字段验证的具体代码,供大家参考,具体内容如下

下面的代码以登录功能为例。

功能描述: 用户输入密码时,失去焦点进行密码校验,当输入有误时,显示错误提示信息;只要密码值发生了变化,错误提示信息就移除。

通过watch监控password字段,实现实时移除。

vue2 模板语法代码如下:

<template>
    <div>
         <el-form :model="form" :rules="rules" ref="form" label-width="140px">
          <el-form-item label="用户名" prop="username">
           <el-input v-model="form.username" placeholder="请输入用户名"></el-input>
          </el-form-item>
          <el-form-item label="密码" prop="password">
            <el-input type="password" v-model="form.password" placeholder="请输入密码"
            ></el-input>
          </el-form-item>
          <el-form-item>
            <el-button type="primary" @click="submit('form')">提交</el-button>
            <el-button @click="reset('form')">取消</el-button>
          </el-form-item>
        </el-form>
    <div>
</template>
<script>
export default {
    data() {
        let validatePwd  = (rule, value, callback) => {
            // 密码校验
        }
        return {
            form: {
                username: '',
                password: ''
            },
             rules: {
                username: [{ required: true, message: '请输入用户名', trigger: 'blur'}],
                password: [{ required: true, validator: validatePwd, trigger: 'blur'}]
            }
        }
    },
    watch: {
        'form.password'(newVal, oldVal) {
            if(newVal, oldVal) {
                  this.$refs['form'].clearValidate('password');
            }
        }
    }
 
}
</script>

vue2+composition-api 使用tsx语法开发,代码如下:

service.ts

export const initFormState = {
    username: '',
    password: ''
}
 
const validatePwd = (rule, value, callback) => {
    // 密码校验
}
 
export const formStateRules = {
    username: [
        { required: true, message: '请输入用户名', trigger: 'blur'}
    ],
    password: [
        { required: true, validator: validatePwd, trigger: 'blur'}
    ]
}

index.tsx文件

import { onMounted, reactive, ref, watch } from "@vue/composition-api";
import { initFormState} from './service.ts';
 
export default defineComponent({
    setup (prop,{root}) {
     
        const formState= reactive({
            ...initFormState, // 从service引入进来
        })
 
        const formRef = ref(null);
        
        const submit = ()  => {
            // 表单校验
            const formValidate = await new Promise(resolve => {
                (formRef as any).value.validate((valid: boolean) => resolve(valid));
            });
 
            if(!formValidate) return;
            // 表单校验通过后进行的逻辑
        }
 
        const reset = () => {
             Object.keys(formState).map((key: string) => formState[key] = (initFormState as any)[key]);
        }
    
        // 监控password, 按需移除错误提示信息
       watch(() => formState.password, ()=> {
           const result = formState.password;
            if(result) {
                (formRef as any).value.clearValidate('password')
            }
        })
        return {
            formState,
            formRef,
            formStateRules,
            submit,
            reset
        }
    
    },
    render() {
        return (
            <div>
                <el-form 
                    ref="formRef" 
                    form={this.formState} 
                    props={{model: this.formState}}
                    rules={formStateRules}  label-width="140px">
                  <el-form-item label="用户名" prop="username">
                       <el-input v-model={this.formState.username} placeholder="请输入用户名"></el-input>
                  </el-form-item>
                  <el-form-item label="密码" prop="password">
                    <el-input type="password" v-model={this.formState.password} placeholder="请输入密码"></el-input>
                  </el-form-item>
                  <el-form-item>
                    <el-button type="primary" onClick={this.submit}>提交</el-button>
                    <el-button onClick={this.reset}>取消</el-button>
                  </el-form-item>
                </el-form>
            </div>
        )
    }
 
})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • vue data中的return使用方法示例

    vue data中的return使用方法示例

    当一个组件被定义,data必须声明为返回一个初始数据对象的函数,因为组件可能被用来创建多个实例,下面这篇文章主要给大家介绍了关于vue data中return使用,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • Vue2中使用Monaco Editor的教程详解

    Vue2中使用Monaco Editor的教程详解

    Monaco-editor,一个vs code 编辑器,这篇文章主要为大家详细介绍了如何在Vue2中使用Monaco Editor,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-01-01
  • 使用vue-element-admin框架调用后端接口及跨域的问题

    使用vue-element-admin框架调用后端接口及跨域的问题

    这篇文章主要介绍了使用vue-element-admin框架调用后端接口及跨域的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • vue如何使用el-table遍历循环表头和表体数据

    vue如何使用el-table遍历循环表头和表体数据

    这篇文章主要介绍了vue如何使用el-table遍历循环表头和表体数据,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • Vue常用指令v-if与v-show的区别浅析

    Vue常用指令v-if与v-show的区别浅析

    v-if和v-show的区别是前端面试中常问的基础知识点,v-if、v-show顾名思义就是用来判断视图层展示效果的,下面这篇文章主要给大家介绍了关于Vue常用指令v-if与v-show区别的相关资料,需要的朋友可以参考下
    2021-10-10
  • vue路由监听的一些常用方式

    vue路由监听的一些常用方式

    有时在页面刷新或者返回等操作时,想监听路由变化进行数据更新等操作,下面这篇文章主要给大家介绍了关于vue路由监听的一些常用方式,需要的朋友可以参考下
    2023-10-10
  • Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)

    Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)

    文章介绍了如何使用dhtmlx-gantt组件来实现公司的甘特图需求,并提供了一个简单的Vue组件示例,文章还分享了一些配置项,如格式化表头日期、设置甘特图尺寸、启用只读模式、设置表格列等,感兴趣的朋友一起看看吧
    2025-02-02
  • vue-router路由简单案例介绍

    vue-router路由简单案例介绍

    本篇文章主要介绍了vue-router路由的使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • Pinia.js状态管理器上手使用指南

    Pinia.js状态管理器上手使用指南

    这篇文章主要为大家介绍了Pinia.js状态管理器上手使用指南,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Vue.js如何实现路由懒加载浅析

    Vue.js如何实现路由懒加载浅析

    Vue是可以自定义指令的,最近学习过程中遇见了一个需要懒加载的功能,发现网上这方面的资料较少,所以下面这篇文章主要给大家介绍了关于Vue.js如何实现路由懒加载的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-08-08

最新评论