VeeValidate 4 无需提交按钮即可验证
VeeValidate 4 validate without submit button
我正试图全神贯注于 VeeValidate 4,但它与之前的版本有很大不同,所以我 运行 遇到了很多问号和障碍。
我使用 Vue 3 应用程序,使用组合 API,有几种不同的形式 components/views。有一个“下一页”按钮可以将您带到下一个视图,但是由于该按钮与表单完全分开,所以我没有任何 handleSubmit 连接到表单。相反,如果当前表单有效或无效,我想将其保持在该状态,并通过这种方式确定是否允许用户转到下一页。
我想完成但不确定是否可以完成的是能够在字段验证发生时“挂钩”,并且如果所有表单字段都有效则以这种方式保存到状态.我已经多次查看文档,但我无法弄清楚。如果有任何帮助、提示或想法,我将不胜感激。
这是我的一个Vue的简化版components/views:
<template>
<form>
<CustomInput v-model="name" inputType="text" name="name" />
<div v-if="nameErrors.length">{{ nameErrors[0] }}</div>
<CustomInput v-model="width" inputType="text" name="width" />
<div v-if="widthErrors.length">{{ widthErrors[0] }}</div>
</form>
</template>
<script lang="ts">
import { defineComponent } from 'vue';
import { useField } from 'vee-validate';
import CustomInput from 'CustomInput.vue';
export default defineComponent({
name: 'View',
components: {
CustomInput,
},
setup() {
const { value: name, errors: nameErrors } = useField('name', 'required');
const { value: width, errors: widthErrors } = useField('width', 'required|numeric|boatWidth');
return {
name,
width,
nameErrors,
widthErrors,
};
},
});
</script>
组件层次结构:
LayoutComponent
FormComponent (which component depends on what step the user is on)
NextButtonComponent
您应该使用 useForm
函数来访问表单状态。您可以为此使用 inject/provide
:
// in parent component
const { meta, errors } = useForm();
provide('form_meta', meta);
provide('form_errors', errors);
然后在你的子组件中你可以注入这些属性:
const formMeta = inject('form_meta');
const formErrors = inject('form_errors');
我正试图全神贯注于 VeeValidate 4,但它与之前的版本有很大不同,所以我 运行 遇到了很多问号和障碍。 我使用 Vue 3 应用程序,使用组合 API,有几种不同的形式 components/views。有一个“下一页”按钮可以将您带到下一个视图,但是由于该按钮与表单完全分开,所以我没有任何 handleSubmit 连接到表单。相反,如果当前表单有效或无效,我想将其保持在该状态,并通过这种方式确定是否允许用户转到下一页。
我想完成但不确定是否可以完成的是能够在字段验证发生时“挂钩”,并且如果所有表单字段都有效则以这种方式保存到状态.我已经多次查看文档,但我无法弄清楚。如果有任何帮助、提示或想法,我将不胜感激。
这是我的一个Vue的简化版components/views:
<template>
<form>
<CustomInput v-model="name" inputType="text" name="name" />
<div v-if="nameErrors.length">{{ nameErrors[0] }}</div>
<CustomInput v-model="width" inputType="text" name="width" />
<div v-if="widthErrors.length">{{ widthErrors[0] }}</div>
</form>
</template>
<script lang="ts">
import { defineComponent } from 'vue';
import { useField } from 'vee-validate';
import CustomInput from 'CustomInput.vue';
export default defineComponent({
name: 'View',
components: {
CustomInput,
},
setup() {
const { value: name, errors: nameErrors } = useField('name', 'required');
const { value: width, errors: widthErrors } = useField('width', 'required|numeric|boatWidth');
return {
name,
width,
nameErrors,
widthErrors,
};
},
});
</script>
组件层次结构:
LayoutComponent
FormComponent (which component depends on what step the user is on)
NextButtonComponent
您应该使用 useForm
函数来访问表单状态。您可以为此使用 inject/provide
:
// in parent component
const { meta, errors } = useForm();
provide('form_meta', meta);
provide('form_errors', errors);
然后在你的子组件中你可以注入这些属性:
const formMeta = inject('form_meta');
const formErrors = inject('form_errors');