gpt4 book ai didi

validation - 使用 Vuelidate 和 Bootstrap Vue 在模态中验证表单

转载 作者:搜寻专家 更新时间:2023-10-30 22:16:44 25 4
gpt4 key购买 nike

开发人员,我正在使用 Vuejs,我在模式中有一个表单,我需要使用 vuelidate 在客户端验证表单的字段.

我也用bootstrap-vue创建模式,但是当我实现验证时,我无法使 Cancel 按钮一键清除字段和验证。它关闭模式,清理字段,但当我再次打开它时,字段显示为红色,显示验证错误,我必须再次单击 取消 以清理验证(不想这样做! ).我的模板和脚本如下。

模板

<b-modal
id="signupFormModal"
title="Crie a sua conta!"
ref="modal"
centered
@ok="handleOk"
@cancel="clearForm"
>
<b-container fluid>
<b-card>
<b-form @submit.stop.prevent="handleSubmit">
<b-form-group
id="email"
label-for="email"
>
<b-form-input
ref="focusElement"
autocomplete="username"
id="email"
type="email"
v-model.trim="form.email"
:state="$v.form.email.$dirty ? !$v.form.email.$error : null"
@input="$v.form.email.$touch()"
required
placeholder="E-mail"
/>
<small class="error">{{emailErrors}}</small>
</b-form-group>
</b-form>
</b-card>
</b-container>
</b-modal>

脚本

import { required, minLength, sameAs, email } from 'vuelidate/lib/validators'

export default {
name: 'myForm',
data: () => ({
form: {
email: '',
password: '',
confirmPassword: ''
},
show: true,
nameState: null
}),
validations: {
form: {
email: { required, email },
password: {
required,
minLength: minLength(6)
},
confirmPassword: {
required,
sameAsPassword: sameAs('password')
}
}
},
computed: {
emailErrors () {
if (!this.$v.form.email.$dirty) {
this.returnNull()
return ''
} else if (!this.$v.form.email.required) {
this.returnFalse()
return 'E-mail é obrigatório'
} else if (!this.$v.form.email.email) {
this.returnFalse()
return 'Exemplo: exemplo@exemplo.com'
} else {
this.returnNull()
}
}
},

methods: {
clearForm () {
/* Reset our form values */
this.form.email = ''
this.form.password = ''
this.form.confirmPassword = ''
this.$v.$reset()
},
handleOk (evt) {
// Prevent modal from closing
evt.preventDefault()
if (!this.$v.invalid) {
this.handleSubmit()
} else {
this.$v.touch()
}
},

handleSubmit () {
console.log(JSON.stringify(this.form))
this.clearForm()
this.$refs.modal.hide()
},

focusMyElement (e) {
this.$refs.focusElement.focus()
},

returnNull () {
this.nameState = null
},
returnFalse () {
this.nameState = false
},
returnTrue () {
this.nameState = null
}
}
}

有谁知道如何解决这个问题?我现在已经陷入困境 2 天了。

提前感谢您的帮助。

最佳答案

在您的 clearForm 方法中,只需将对 $reset() 的调用替换为:

this.$nextTick(() => { this.$v.$reset(); })

在某些情况下,您需要在 DOM 更新和数据更改后调用 $reset(),这可以通过 nextTick 实现。

关于validation - 使用 Vuelidate 和 Bootstrap Vue 在模态中验证表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49943140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com