我正在尝试使用Vee-Validate,并且我正在努力使用从API加载的初始值,并获取值,无论表单是否脏。
<script setup lang="ts">
const model: Ref<Company | any> = ref({})
const { handleSubmit, errors, meta } = useForm({
validationSchema: {
name: yup.string().required("Name is required")
},
initialValues: model
})
const handleCompanyOverviewSave = handleSubmit(async (form: any) => {
console.log(meta.value.dirty) // here it is always true
})
onMounted(async () => {
const api = useApi()
model.value = (await api.get(`/companies/${store.currentCompany.id}`)).data
})
</script>
问题是,当我使用像{ name: "test" }
这样的简单对象作为初始值时,只有当我更改字段时,meta.dirty
才真正为真。但是,当我使用从API加载的模型并将其分配给ref
对象时,它会因为分配本身而变脏——我理解这一点。
但是,从API为useForm
设置初始值的正确方法是什么?
感谢
如果您使用vee-validate: "^4.6.9"
和vue: "^3.2.39"
,则可能会使用以下解决方案:
- 以标签形式添加新的atribute
:initial-values="formValues"
- 然后在setup((中添加:
const formValues = {
yourFieldName: 'init value',
};
- 仍在setup((中返回{formValues}
这项工作对我来说:D