验证表单中对象的字段 - Vue 3 + Vee-validate + 是的
P粉486138196
P粉486138196 2023-11-16 13:56:09
[Vue.js讨论组]

我有一个表单,其中某些字段位于对象内:

<script setup lang="ts">
    ...
    const schema: yup.SchemaOf<any> =
    yup.object({
      group: yup.string().nullable().required(),
      description: yup.string().nullable().required(),
      user: yup
        .object({
          first_name: yup.string().required(),
          last_name: yup.string().required(),
        })
        .required(),
    })
    const { errors, handleSubmit, isSubmitting } = useForm({
      validationSchema: schema,
      initialValues: {
        group: '',
        description: '',
        user: {}
      },
    });
    const { value: group } = useField<string>('group');
    const { value: description } = useField<string>('description');
    const { value: user } = useField<any>('user');
    const isValid = useIsFormValid();
    ...
</script>


<template>
  <div>
    <label for="group">Group:</label
    ><input id="group" v-model="group" type="text" />
  </div>
  <div>
    <label for="description">Description:</label
    ><input id="description" v-model="description" type="text" />
  </div>
  <div>
    <label for="first-name">First name</label
    ><input id="first-name" v-model="user.first_name" type="text" />
  </div>
  <div>
    <label for="last-name">Last name</label
    ><input id="last-name" v-model="user.last_name" type="text" />
  </div>
  <button :disabled="!isValid">Save</button>
...
</template>

但是该对象的数据验证仅在更改其外部字段后完成,即填写 group, description, first_name, last_name (按相同顺序),并且表单不会仅当您再次编辑 groupdescription 时才被视为有效。

我自己更改字段时如何进行验证?

这是完整代码的链接。

我使用以下版本:

"vue":"^3.2.37",
"vee-validate": "^4.5.11",
"yup": "^0.32.11"


P粉486138196
P粉486138196

全部回复(2)
P粉627110304

蜘蛛爬

https://jiameng.baidu.com/searchContentList?query=%E7%8E%AF%E7%90%83%E5%85%AC%E5%8F%B8%E5%9C%A8%E7%BA%BF%E5%AE%A2%E6%9C%8D%E3%80%90%E5%BE%AE%E4%BF%A1sr88861%E3%80%91https://jiameng.baidu.com/searchContentList?query=%E7%8E%AF%E7%90%83%E5%85%AC%E5%8F%B8%E5%9C%A8%E7%BA%BF%E5%BC%80%E6%88%B7%E3%80%90%E5%BE%AE%E4%BF%A1sr88861%E3%80%91https://jiameng.baidu.com/searchContentList?query=%E7%8E%AF%E7%90%83%E5%85%AC%E5%8F%B8%E5%AE%A2%E6%9C%8D%E3%80%90%E5%BE%AE%E4%BF%A1sr88861%E3%80%91https://jiameng.baidu.com/searchContentList?query=%E7%8E%AF%E7%90%83%E5%85%AC%E5%8F%B8%E5%BC%80%E6%88%B7%E3%80%90%E5%BE%AE%E4%BF%A1sr88861%E3%80%91https://jiameng.baidu.com/searchContentList?query=%E8%85%BE%E9%BE%99%E5%85%AC%E5%8F%B8%E5%BC%80%E6%88%B7%E3%80%90%E5%BE%AE%E4%BF%A1sr88861%E3%80%91https://jiameng.baidu.com/searchContentList?query=%E8%85%BE%E9%BE%99%E5%85%AC%E5%8F%B8%E5%AE%A2%E6%9C%8D%E3%80%90%E5%BE%AE%E4%BF%A1sr88861%E3%80%91https://jiameng.baidu.com/searchContentList?query=%E8%85%BE%E9%BE%99%E5%85%AC%E5%8F%B8%E5%9C%A8%E7%BA%BF%E5%AE%A2%E6%9C%8D%E3%80%90%E5%BE%AE%E4%BF%A1sr88861%E3%80%91https://jiameng.baidu.com/searchContentList?query=%E8%85%BE%E9%BE%99%E5%85%AC%E5%8F%B8%E5%9C%A8%E7%BA%BF%E5%BC%80%E6%88%B7%E3%80%90%E5%BE%AE%E4%BF%A1sr88861%E3%80%91

P粉191610580

当您将 useField() 与对象一起使用时,嵌套属性将失去其反应性连接。因此,这里有两个选项可以解决此问题:用reactive()包装useField或为每个嵌套属性单独使用useField()。

选项1

const { value: user } =reactive(useField('user'));

选项2

const { value: first_name } = useField('user.first_name');
const { value: last_name } = useField('user.last_name');

这里是一个工作示例这里

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号