uniapp 之 uni-forms校验提示【提交的字段[‘xxx‘]在数据库中并不存在】解决方案

场景

  uni-forms官方组件地址

  使用uniapp官方提供的组件,某个表单需求,单位性质字段如果是高校,那么工作单位则是高校的下拉选择格式,单位性质如果是其他的类型,工作单位则是手动输入的输入框格式的。

  

问题代码

<uni-forms ref="form" :modelValue="formData" :rules="rules" class="form-box" err-show-type="toast" label-width="120px" border>
	<!-- ...只放了一些主要代码... -->
	<uni-forms-item label="单位性质" name="unitCategory" required>
        <z-picker dict-type="icm_unit_category" v-model="formData.unitCategory"></z-picker>
    </uni-forms-item>
    <uni-forms-item
        label="工作单位"
        name="unitName"
        required
        v-if="formData.unitCategory != 1"
    >
        <uni-easyinput v-model="formData.unitName" placeholder="请输入" :input-border="false" maxlength="50" />
    </uni-forms-item>
    <uni-forms-item
        label="工作单位"
        name="tenantId"
        required
        v-if="formData.unitCategory == 1"
    >
        <z-select
            v-model="formData.tenantId"
            url="/admin-api/system/tenant/list"
            :query-params="{ pageNo: 1, pageSize: 100, unitCategory: 1 }"
            search-key="name"
            result-key="list"
            label-key="name"
            @curr-item="(item) => (formData.unitName = item.name)"
        ></z-select>
    </uni-forms-item>
    <!-- ...只放了一些主要代码... -->
</uni-forms>

<view class="flex-item-center btns fixed-bottom-box">
    <button type="primary" plain class="save-btn" @click="save">暂 存</button>
    <button type="primary" class="submit-btn" @click="submit">提 交</button>
</view>
submit: $debounce.throttle(async function () {
	await this.$refs.form.validate()
	// ... 其他提交逻辑代码
})         

  

结果

  点击提交结果提示:提交的字段['tenantId']在数据库中并不存在
在这里插入图片描述
在这里插入图片描述

  

问题剖析

  出现这个问题是因为v-if导致的,初始的时候条件没有满足,导致相应的dom没有渲染,后续虽然满足了条件,dom渲染了,但是由于ui-forms组件等原因并没有正确获取的重新渲染后的dom中的变量;

  

解决方案

  • 方案1:给v-if绑定的元素加key
<uni-forms-item
    label="工作单位"
    name="unitName"
    required
    v-if="formData.unitCategory != 1"
    :key="formData.unitCategory"
>
    <uni-easyinput v-model="formData.unitName" placeholder="请输入" :input-border="false" maxlength="50" />
</uni-forms-item>
<uni-forms-item
    label="工作单位"
    name="tenantId"
    required
    v-if="formData.unitCategory == 1"
    :key="formData.unitCategory"
>
    <z-select
        v-model="formData.tenantId"
        url="/admin-api/system/tenant/list"
        :query-params="{ pageNo: 1, pageSize: 100, unitCategory: 1 }"
        search-key="name"
        result-key="list"
        label-key="name"
        @curr-item="(item) => (formData.unitName = item.name)"
    ></z-select>
</uni-forms-item>
  • 方案2:给v-if的元素再套一层父元素如<template>,并将v-if放到父元素上面
<template v-if="formData.unitCategory != 1">
	<uni-forms-item
	    label="工作单位"
	    name="unitName"
	    required
	>
	    <uni-easyinput v-model="formData.unitName" placeholder="请输入" :input-border="false" maxlength="50" />
	</uni-forms-item>
</template>
<template v-if="formData.unitCategory == 1">
	<uni-forms-item
	    label="工作单位"
	    name="tenantId"
	    required
	>
	    <z-select
	        v-model="formData.tenantId"
	        url="/admin-api/system/tenant/list"
	        :query-params="{ pageNo: 1, pageSize: 100, unitCategory: 1 }"
	        search-key="name"
	        result-key="list"
	        label-key="name"
	        @curr-item="(item) => (formData.unitName = item.name)"
	    ></z-select>
	</uni-forms-item>
</template>

完美解决。

Uni-Forms是一个用于构建表单的React库,它提供了一个简洁、易用的方式来创建响应式和一致的表单布局。`label-align`属性在uni-forms中用于设置表单元素(如`<Field>`组件)的标签对齐方式,通常支持像"left"、"right"这样的值。 如果你发现`label-align`属性没有生效,可能是以下几个原因: 1. **语法错误**:检查你的代码是否正确地设置了这个属性,比如是否拼写正确,放在了正确的元素上,例如: ```jsx <Form.Field label="字段名" labelAlign="right"> {/* 输入框或其他元素 */} </Form.Field> ``` 2. **版本兼容性**:确认你的uni-forms版本是否支持该属性。如果较旧版本可能不包含此功能,需要更新到最新版。 3. **样式覆盖**:有可能是你自定义的CSS或者其他样式库的样式优先级高于uni-forms,导致`label-align`失效。你需要检查是否有无意中覆盖了uni-forms的默认样式。 4. **状态或条件渲染**:`label-align`可能只在特定的状态或条件下才会生效。确保你不是在一个不应该应用此属性的情况下使用它。 5. **浏览器兼容性**:尽管uni-forms已经尽可能地处理跨浏览器问题,但仍可能存在个别浏览器对某些CSS属性的支持差异。 如果你遇到问题,可以尝试清除缓存、更新依赖,或者查看uni-forms的文档或官方示例,以及查看开发者工具的样式面板以了解实际应用的情况。如果以上都排查无果,可以在相关论坛或社区提问寻求帮助,包括详细的代码片段和报错信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

庄山聆壑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值