在 vuelidate/VueJS 中的当前范围之外访问验证 属性?
Accessing validation property outside the current scope in vuelidate/VueJS?
鉴于 Vue 2 中的以下组件使用 属性 验证中的 vuelidate
:
<template>
// template stuff here...
</template>
<script>
import { validationMixin } from "vuelidate";
import { required, requiredIf } from "vuelidate/lib/validators";
export default {
name: "ParentComponent",
mixins: [validationMixin],
data() {
return {
selected: false,
user: {
email: null,
password: null,
},
};
},
validations: {
selected: { required },
user: {
email: { required: requiredIf((vm) => vm.selected) },
password: { required: requiredIf((vm) => vm.selected) },
},
},
};
</script>
属性 user.email
和 user.password
是必需的,但前提是 selected
的验证成功通过。但是,这种方法似乎不起作用,可能是因为 selected
不是 user
验证对象的一部分。
有没有办法访问此验证属性?像这样...
validations: {
selected: { required },
user: {
email: { required: requiredIf((vm) => vm.$parentVm.selected) },
password: { required: requiredIf((vm) => vm.$parentVm.selected) },
},
},
就是这样。演示 https://codesandbox.io/s/green-darkness-90fjs。
requiredIf
解决这个问题的好办法
鉴于 Vue 2 中的以下组件使用 属性 验证中的 vuelidate
:
<template>
// template stuff here...
</template>
<script>
import { validationMixin } from "vuelidate";
import { required, requiredIf } from "vuelidate/lib/validators";
export default {
name: "ParentComponent",
mixins: [validationMixin],
data() {
return {
selected: false,
user: {
email: null,
password: null,
},
};
},
validations: {
selected: { required },
user: {
email: { required: requiredIf((vm) => vm.selected) },
password: { required: requiredIf((vm) => vm.selected) },
},
},
};
</script>
属性 user.email
和 user.password
是必需的,但前提是 selected
的验证成功通过。但是,这种方法似乎不起作用,可能是因为 selected
不是 user
验证对象的一部分。
有没有办法访问此验证属性?像这样...
validations: {
selected: { required },
user: {
email: { required: requiredIf((vm) => vm.$parentVm.selected) },
password: { required: requiredIf((vm) => vm.$parentVm.selected) },
},
},
就是这样。演示 https://codesandbox.io/s/green-darkness-90fjs。
requiredIf
解决这个问题的好办法