我正在使用Vue-Bootstrap,我的组件中有一个b-form-input
,它是一个密码。我检查此输入的验证是否密码至少有8个字符长:
<b-form-group
label="Password: (8 characters minimum)"
minlength="8"
class="text-left mt-3"
>
<b-form-input
v-model="form.password"
type="password"
name="password"
placeholder="Enter Your Password"
:state="passwordState"
pattern=".{8,}"
description="please enter a password "
title="Password should be at least 8 characters long"
required
></b-form-input>
<b-form-invalid-feedback :state="passwordState">
Your password must be at least 8 characters long.
</b-form-invalid-feedback>
</b-form-group>
<b-form-group
was-validated
label="Confirm Password:"
class="text-left mt-3"
>
<b-form-input
type="password"
v-model="form.confirmpassword"
placeholder="Confirm Your Password"
required
:state="confirmPasswordState"
pattern=".{8,}"
></b-form-input>
<b-form-invalid-feedback :state="confirmPasswordState">
Your confirmed password must be exactly the same as your password
field.
</b-form-invalid-feedback>
</b-form-group>
computed: {
confirmPasswordState() {
return this.form.password == this.form.confirmpassword &&
this.form.confirmpassword != ""
? true
: false;
},
passwordState() {
return this.form.password.length >= 8 ? true : false;
},
},
我只想让这个状态验证出现在模糊上,而不是负载上。
发布于 2021-05-05 20:21:29
我认为最简单的方法是在数据中添加一个标志来跟踪输入是否模糊,然后根据该标志设置验证条件。
passwordHasBlurred: false
添加到data()
@blur="passwordHasBlurred = true"
添加到两个<b-form-input>
s:中- confirmPasswordState() { return this.passwordHasBlurred ? this.form.password == this.form.confirmpassword && this.form.confirmpassword != "" ? true : false : null; },
下面是一个可以运行的例子!(因其大小而隐藏):
new Vue({
el: '#app',
data() {
return {
form: {
password: '',
confirmPassword: '',
},
passwordHasBlurred: false,
}
},
computed: {
confirmPasswordState() {
return this.passwordHasBlurred
? this.form.password == this.form.confirmpassword &&
this.form.confirmpassword != ""
? true
: false
: null;
},
passwordState() {
return this.passwordHasBlurred
? this.form.password.length >= 8
? true
: false
: null;
},
},
methods: {
reset() {
this.form.password = '';
this.form.confirmPassword = '';
this.passwordHasBlurred = false;
},
},
});
body {
padding: 1rem;
}
<!-- Add Vue and Bootstrap-Vue to snippet -->
<link type="text/css" rel="stylesheet" href="//unpkg.com/bootstrap/dist/css/bootstrap.min.css" /><link type="text/css" rel="stylesheet" href="//unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.min.css" /><script src="//polyfill.io/v3/polyfill.min.js?features=es2015%2CIntersectionObserver" crossorigin="anonymous"></script><script src="//unpkg.com/vue@2/dist/vue.min.js"></script><script src="//unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.min.js"></script>
<template id="app">
<div>
<b-form-group
label="Password: (8 characters minimum)"
minlength="8"
class="text-left mt-3"
>
<b-form-input
v-model="form.password"
type="password"
name="password"
placeholder="Enter Your Password"
:state="passwordState"
pattern=".{8,}"
description="please enter a password "
title="Password should be at least 8 characters long"
required
@blur="passwordHasBlurred = true"
></b-form-input>
<b-form-invalid-feedback :state="passwordState">
Your password must be at least 8 characters long.
</b-form-invalid-feedback>
</b-form-group>
<b-form-group
label="Confirm Password:"
class="text-left mt-3"
>
<b-form-input
type="password"
v-model="form.confirmpassword"
placeholder="Confirm Your Password"
required
:state="confirmPasswordState"
pattern=".{8,}"
@blur="passwordHasBlurred = true"
></b-form-input>
<b-form-invalid-feedback :state="confirmPasswordState">
Your confirmed password must be exactly the same as your password
field.
</b-form-invalid-feedback>
</b-form-group>
<br>
<b-btn variant="outline-secondary" @click="reset">
Reset
</b-btn>
</div>
</template>
如果您希望或需要单独跟踪每个输入的模糊,只需将另一个属性添加到数据中,以便跟踪和相应地调整计算的属性和事件处理程序。
https://stackoverflow.com/questions/67407304
复制相似问题