如何使用 veeValidate 中的 validateAll 作为计算 属性 来禁用表单?
How to disable a form using validateAll from veeValidate as a computed property?
假设我在一个组件中有这个按钮,并且想要动态地禁用该按钮,直到用户用有效的电子邮件填写文本字段。
<v-btn
type="submit"
data-test="btn-identity"
block
large
:disabled="!validEmail"
color="primary">{{ $t('button.identity') }}
</v-btn>
<v-text-field
v-validate="'required|email'"
v-model="form.userId"
:label="$t('placeholder.userId')"
:error-messages="errors.collect('email')"
data-vv-name="email"
required
autofocus
/>
我正在将有效电子邮件设置为计算结果 属性,但它似乎不起作用,因为它是一个承诺
computed: {
validEmail () {
return this.$validator.validateAll().then((result) => {
return result;
})
}
},
Vue 中的计算属性是同步的。您可以尝试 vue-async-computed 或使用 watcher
<v-btn
type="submit"
data-test="btn-identity"
block
large
:disabled="!validEmail"
color="primary">{{ $t('button.identity') }}
</v-btn>
<v-text-field
v-validate="'required|email'"
v-model="form.userId"
:label="$t('placeholder.userId')"
:error-messages="errors.collect('email')"
data-vv-name="email"
required
autofocus
/>
watch: {
"form.userId": function (newId, oldId) {
this.$validator.validateAll().then((result) => {
this.validEmail = result; // use a separate method to set validEmail here
})
}
},
我还找到了用于异步验证的 vee-validate 文档。它与我上面建议的想法相同:https://vee-validate.logaretm.com/examples.html#coupon-example
假设我在一个组件中有这个按钮,并且想要动态地禁用该按钮,直到用户用有效的电子邮件填写文本字段。
<v-btn
type="submit"
data-test="btn-identity"
block
large
:disabled="!validEmail"
color="primary">{{ $t('button.identity') }}
</v-btn>
<v-text-field
v-validate="'required|email'"
v-model="form.userId"
:label="$t('placeholder.userId')"
:error-messages="errors.collect('email')"
data-vv-name="email"
required
autofocus
/>
我正在将有效电子邮件设置为计算结果 属性,但它似乎不起作用,因为它是一个承诺
computed: {
validEmail () {
return this.$validator.validateAll().then((result) => {
return result;
})
}
},
Vue 中的计算属性是同步的。您可以尝试 vue-async-computed 或使用 watcher
<v-btn
type="submit"
data-test="btn-identity"
block
large
:disabled="!validEmail"
color="primary">{{ $t('button.identity') }}
</v-btn>
<v-text-field
v-validate="'required|email'"
v-model="form.userId"
:label="$t('placeholder.userId')"
:error-messages="errors.collect('email')"
data-vv-name="email"
required
autofocus
/>
watch: {
"form.userId": function (newId, oldId) {
this.$validator.validateAll().then((result) => {
this.validEmail = result; // use a separate method to set validEmail here
})
}
},
我还找到了用于异步验证的 vee-validate 文档。它与我上面建议的想法相同:https://vee-validate.logaretm.com/examples.html#coupon-example