validation - vee-validate 是否适用于第三方 UI 组件,例如 Primevue?
问题描述
我正在使用 vee-validate v4.0、vue 的 (v3) 组件以及来自 Primevue 和 Ionic 的 TypeScript 和 UI 组件。对简单输入字段的验证工作正常:
<template>
...
<Field
v-slot="{ field }"
v-model="username"
:rules="isRequired"
name="username"
>
<IonInput
v-bind="field"
type="text"
/>
</Field>
<ErrorMessage
name="username"
class="error"
/>
...
</template>
<script lang="ts">
...
methods: {
isRequired (value: string) {
if (!value) {
return 'This field is required'
}
return true
}
}
...
</script>
将其应用于 Primevue 的Dropdown元素失败:
<Field
v-slot="{ field }"
v-model="campaign"
name="campaign"
:rules="isRequired"
>
<Dropdown
:options="campaigns"
option-value="id"
option-label="name"
placeholder="Choose a campaign"
v-bind="field"
/>
</Field>
<ErrorMessage
name="campaign"
class="error"
/>
验证按预期工作,但打开下拉菜单会导致错误消息:
你知道如何解决这个问题吗?是否有示例 vee-validate 如何处理更复杂的字段,如下拉或多选元素?
解决方案
您需要添加@update:modelValue="handleChange"
到您的下拉列表中:
<Field
v-slot="{ field, handleChange }"
v-model="campaign"
name="campaign"
:rules="isRequired"
>
<Dropdown
:options="campaigns"
option-value="id"
option-label="name"
placeholder="Choose a campaign"
v-bind="field"
@update:modelValue="handleChange"
/>
</Field>
<ErrorMessage
name="campaign"
class="error"
/>
推荐阅读
- typo3 - 将复杂的 TypoScript 条件迁移到 10 LTS / 11 LTS
- c++ - #foo:Qt 中的主动替代
- mysql - 我需要在代码中添加什么来更改日期格式
- java - 使用 Spring Boot 和 Hibernate 在 2 个微服务中建立多对多关系的问题
- sql - 有没有办法在没有 case 语句的情况下运行?
- angular - 行为主体在不同的方法上给出不同的值,返回 null 直到页面刷新
- javascript - 如何一次只显示一个可折叠元素?
- python - 直接发送整个字符串和逐个字符发送有什么区别?
- saml-2.0 - 在远程服务提供商上导入 XML 文件时出错:Forgerock AM 7.1.0
- java - 将文本添加到图像并使其适合 Java 中的矩形区域