Vue.js Vuelidate复选框验证
我正在使用Vue.js,我对它还不熟悉。我目前正在进行验证。我使用vuelidate作为我的验证库。我已经成功地完成了表单验证,但当我必须选中“验证”复选框时,麻烦来了Vue.js Vuelidate复选框验证,vue.js,bootstrap-vue,vuelidate,Vue.js,Bootstrap Vue,Vuelidate,我正在使用Vue.js,我对它还不熟悉。我目前正在进行验证。我使用vuelidate作为我的验证库。我已经成功地完成了表单验证,但当我必须选中“验证”复选框时,麻烦来了 <b-col lg="6" md="6" sm="6"> <label>Bus Route</label> <b-form-group> <b-form-checkbox v-for="route in busRouteList"
<b-col lg="6" md="6" sm="6">
<label>Bus Route</label>
<b-form-group>
<b-form-checkbox v-for="route in busRouteList"
v-model.trim="selectedRoute"
v-bind:value="route.value"
v-bind:unchecked-value="$v.selectedRoute.$touch()">
{{route.text}}</b-form-checkbox>
</b-form-group>
<div class="form-group__message" v-if="$v.selectedRoute.error && !$v.selectedRoute.required">
Field is required
</div>
</b-col>
validations: {
selectedRoute: {
required
},
}
如何选中复选框的验证?此外,我还使用bootstrapvue来显示复选框
<b-col lg="6" md="6" sm="6">
<label>Bus Route</label>
<b-form-group>
<b-form-checkbox v-for="route in busRouteList"
v-model.trim="selectedRoute"
v-bind:value="route.value"
v-bind:unchecked-value="$v.selectedRoute.$touch()">
{{route.text}}</b-form-checkbox>
</b-form-group>
<div class="form-group__message" v-if="$v.selectedRoute.error && !$v.selectedRoute.required">
Field is required
</div>
</b-col>
validations: {
selectedRoute: {
required
},
}
巴士路线
{{route.text}
字段是必需的
验证:{
所选路线:{
必修的
},
}
您应该绑定@change方法:
<b-form-checkbox v-for="route in busRouteList"
v-model.trim="selectedRoute"
v-bind:value="route.value"
@change="$v.selectedRoute.$touch()">
我希望这个小示例将帮助您理解如何验证复选框。 您必须检查输入何时更改。我建议您使用@change 模板中
<div class="input">
<label for="country">Country</label>
<select id="country" v-model="country">
<option value="usa">USA</option>
<option value="india">India</option>
<option value="uk">UK</option>
<option value="germany">Germany</option>
</select>
</div>
<div class="input inline" :class="{invalid: $v.terms.$invalid}">
<input type="checkbox" id="terms" v-model="terms" @change="$v.terms.$touch()">
<label for="terms">Accept Terms of Use</label>
</div>
当然,术语是在data()中定义的:
由于false也是有效值,因此您应该尝试使用
sameAs
import { sameAs } from 'vuelidate/lib/validators'
terms: {
sameAs: sameAs( () => true )
}
使用(对于Vue 2和Vue 3支持),它非常简单,只需将sameAs
内置验证器与true
作为直接参数即可。例如,在设置中使用方法时:
const termsAccepted = ref(false)
const v$ = useVuelidate(
{ termsAccepted: { sameAs: sameAs(true) } },
{ termsAccepted }
)
return { v$, termsAccepted }
`
`您可以发布您的数据吗()?您是如何初始化selectedRoute的?几乎更像:术语:{sameAs:val=>val==true}
@zenw0lf您的建议不起作用,因为根据文档:“当作为函数提供时,它接收验证中的模型作为参数”而不是值。因此它更像是terms:{sameAs:vueModel=>vueModel.terms==true}
在任何情况下,由帖子所有者提供的解决方案都是最好的。@icosmin阅读有关自定义验证器的部分。它起作用了。我已经使用并测试了要求用户接受ToS等的验证器。它不起作用
import { sameAs } from 'vuelidate/lib/validators'
terms: {
sameAs: sameAs( () => true )
}
const termsAccepted = ref(false)
const v$ = useVuelidate(
{ termsAccepted: { sameAs: sameAs(true) } },
{ termsAccepted }
)
return { v$, termsAccepted }
validations: {
terms: {
checked: (val) => {return val;}
}
}