开发, 我正在使用Vuejs,我在模态中有一个表单,我需要使用vuelidate在客户端验证表单的字段。
我还使用bootstrap-vue来创建模态,但是当我实现验证时,我无法通过取消按钮一键清除字段和验证。 它会关闭模态,清理字段,但是当我再次打开它时,字段显示红色,显示验证错误,我必须再次单击取消以清除验证(不要这样做! )。我的模板和脚本如下。
TEMPLATE
<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>
SCRIPT
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天。
提前感谢帮助。
答案 0 :(得分:1)
在您的 clearForm 方法中,只需将对 $ reset()的调用替换为:
this.$nextTick(() => { this.$v.$reset(); })
在某些情况下,您需要在DOM更新和数据更改后调用 $ reset(),这可以通过 nextTick 来实现。