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>

完美解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

庄山聆壑

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

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

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

打赏作者

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

抵扣说明:

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

余额充值