Laravel+Vue模态表单验证错误关闭重开后仍存在问题
解决Vue模态框关闭后验证错误信息残留的问题
这个问题我之前做Laravel+Vue项目的时候也碰到过!本质是v-validate的错误信息默认存在全局的errors对象里,当你关闭模态框时组件并没有被销毁,错误信息也就一直保留着,下次打开自然就还能看到。给你几个实用的解决办法:
方法一:监听模态框关闭事件,清除对应字段错误
如果用的是Bootstrap模态框,可以直接监听它的hidden.bs.modal事件,在模态框完全关闭时清除验证错误并重置表单字段:
<template> <div> <!-- 你的模态框 --> <div class="modal" ref="createModal" @hidden.bs.modal="resetModal"> <div class="modal-content"> <form role="form"> <div class="form-group"> <label>姓氏</label> <input name="LastName" type="text" class="form-control" v-validate data-vv-rules="required" v-model="createForm.LastName" > <!-- 错误提示 --> <p class="text-danger" v-if="errors.has('LastName')"> {{ errors.first('LastName') }} </p> </div> <!-- 其他表单元素 --> <button type="button" class="btn btn-primary">提交</button> </form> </div> </div> </div> </template> <script> export default { data() { return { createForm: { LastName: '' } } }, methods: { resetModal() { // 清除单个字段的验证错误 this.errors.clear('LastName'); // 如果有多个字段,逐个清除或者用this.errors.clear()清除所有(注意会影响其他表单) // this.errors.clear(); // 重置表单字段值,避免旧内容残留 this.createForm.LastName = ''; }, // 也可以在打开模态框时就重置状态 openModal() { this.resetModal(); // 打开模态框的逻辑,比如jQuery方式:$(this.$refs.createModal).modal('show') } } } </script>
方法二:使用验证作用域隔离错误
给表单添加data-vv-scope属性,把当前表单的验证错误限定在这个作用域内,清除时只需要针对该作用域操作,不会影响其他表单的验证:
<template> <div> <div class="modal" @hidden.bs.modal="resetModal"> <div class="modal-content"> <!-- 添加作用域 --> <form role="form" data-vv-scope="create-user"> <div class="form-group"> <label>姓氏</label> <input name="LastName" type="text" class="form-control" v-validate data-vv-rules="required" v-model="createForm.LastName" > <!-- 错误提示要加上作用域前缀 --> <p class="text-danger" v-if="errors.has('create-user.LastName')"> {{ errors.first('create-user.LastName') }} </p> </div> </form> </div> </div> </div> </template> <script> export default { data() { return { createForm: { LastName: '' } } }, methods: { resetModal() { // 清除整个作用域的错误 this.errors.clear('create-user'); // 重置表单 this.createForm.LastName = ''; } } } </script>
关键思路总结
不管用哪种方法,核心都是在模态框关闭/打开时,主动清除对应字段的验证错误并重置表单数据。因为v-validate的errors对象是全局维护的,只要组件没被销毁,错误信息就不会自动消失,必须手动清理。
内容的提问来源于stack exchange,提问作者Pankaj
相关产品推荐
相关产品推荐

