使用vue中的表单验证时,重新输入的value不被检验

在Vue应用中,当使用表单验证时,发现重新输入的值无法触发验证。问题在于rules对象中的属性名需与v-model绑定的字段名称一致。例如,原本的loginForm中name应改为username,pwd应改为password。修正后,表单验证功能恢复正常,确保每次输入后失去焦点都会进行数据验证。

•遇到的问题:

重新在输入框输入的数据,不能被检测。错误效果图如下:

      使用的代码是:

<div class="login-form">
                <el-form ref="form" label-width="0px" :model="loginForm" :rules="loginRules">
                    <el-form-item prop="name">
                        <el-input prefix-icon="el-icon-user-solid" v-model="loginForm.username"></el-input>
                    </el-form-item>
                    <el-form-item prop="pwd">
                        <el-input prefix-icon="el-icon-unlock" v-model="loginForm.password" type="password"></el-input>
                    </el-form-item>
                    <div class="login-btn">
                        <el-button type="primary">登陆</el-button>
                        <el-button type="primary">注册</el-button>
                        
                    </div>

                </el-form>
            </div>

data(){
       return {
           loginForm:{
               username:"小白",
               password:"123",
           },
           loginRules:{
               name:[
                   {required:true,message:"请输入用户名",trigger:"blur"},
                    { min: 2, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
               ],
               pwd:[
                   {required: true, message:'请输入', trigger: 'blur'}
                ]
           }
       }
   }

预期的结果是:每次输入数据,在输入框失去焦点之后,数据就会被检测。

•问题所在:rules中的对象(本例中是loginRules)的属性名必须和数据双向绑定v-model中的命名要一致

所以需要把loginForm中的name改成username,把pwd改成password。

以下为修改后的部分代码:

loginRules:{
               username:[
                   {required:true,message:"请输入用户名",trigger:"blur"},
                    { min: 2, max: 5, message: '长度在 3 到 5 个字符', trigger:'blur' }
               ],
               password:[
                //    {required: true, message:'请输入', trigger: 'blur'}
                   {required: true, min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger:'blur' }
                ]
           }

  让属性的命名保持一致后,表单数据就可以成功验证啦。

可喜可贺,哈哈~

### Vue.js 中的表单验证方法 在 Vue.js 应用程序中,虽然框架本身提供内置的表单验证功能,但是可以通过多种方式来实现这一需求。一种常见的做法是利用第三方库来进行更复杂的验证逻辑。 #### 使用 Vuelidate 进行表单验证 Vuelidate 是专门为 Vue 2.x 设计的一个轻量级响应式的双向数据流验证库。它允许开发者定义规则并自动同步到组件的状态中去[^2]: ```javascript import { validationMixin } from 'vuelidate'; import { required, minLength, maxLength } from 'vuelidate/lib/validators'; export default { mixins: [validationMixin], data() { return { name: '' }; }, validations: { name: { required, minLength: minLength(4), maxLength: maxLength(10) } } }; ``` #### 利用 VeeValidate 插件简化模板驱动型验证 对于希望快速集成简单而强大的验证机制的应用来说,`vee-validate` 提供了一种便捷的选择。该插件支持通过指令轻松添验证条件,并能很好地处理错误消息显示等问题[^3]: ```html <template> <form @submit="handleSubmit"> <input v-model="name" v-validate="'required|min:3'" /> <!-- 错误提示 --> <span>{{ errors.first('name') }}</span> <button type="submit">Submit</button> </form> </template> <script> import { Validator } from 'vee-validate'; Validator.extend('min', (value, args) => value.length >= parseInt(args)); export default { methods: { handleSubmit(e) { e.preventDefault(); this.$validator.validateAll().then(result => { if (!result) return; alert('Form Submitted!'); }); } } } </script> ``` #### 计算属性用于简易表单验证 如果项目规模较小或只需要基本级别的验证,则可以直接采用计算属性配合自定义函数的方式完成必要的检验工作。这种方式相对灵活且易于理解[^4]: ```javascript data() { return { email: '', password: '' } }, computed: { isValidEmail() { const re = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; return re.test(String(this.email).toLowerCase()); }, isPasswordValid() { return this.password.length > 7 && /\d/.test(this.password); } } ``` 以上三种方案各有优劣,在实际开发过程中可以根据具体场景和个人偏好做出合适的选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值