uni-data-select及uni-data-picker使用云端数据驱动的选择器数据回显问题解决办法

在这里插入图片描述

问题描述

uni-data-select及uni-data-picker是uniapp的扩展组件,不但支持本地渲染数据,而且还支持渲染云端数据库的数据,但是云端数据会出现回显的问题,下面就将我再开发中遇到的问题,给大家说一下解决方法。

uni-data-select 下拉框组件

在这里插入图片描述

问题复现

<uni-data-select	
	collection="JLJ-merchant-category"
	field="_id as value, name as text"
	@change="onCategoryChange"
	:value="formData.category_id"
/>

const onCategoryChange = (e) => {
	formData.value.category_id = e;
};

如上代码,之前是让uni-data-select组件使用value属性,只负责展示,通过change事件进行赋值,这样就会造成数据不会显的问题。

解决办法

只需要将:value改成v-model就可以了,这样双向绑定也可以之前去除掉change事件了,如下所示代码:

<uni-data-select	
	collection="JLJ-merchant-category"
	field="_id as value, name as text"	
	v-model="formData.category_id"
/>

uni-data-picker 级联选择器组件

问题复现

在这里插入图片描述

使用这个组件是做的中国省市区的选择,在数据库中area字段记录了省市区的text和value,如下所示:

{
  "_id":"6898a6a29755e3437a99214f",
  "area": [
    {
      "text": "辽宁省",
      "value": "210000"
    },
    {
      "text": "大连市",
      "value": "210200"
    },
    {
      "text": "沙河口区",
      "value": "210204"
    }
  ]
 }

原有代码是如下所示的,获取的是云端数据库的数据,是无法进行回显的。

<uni-data-picker	
	placeholder="请选择地址"
	popup-title="请选择城市"
	collection="opendb-city-china"
	field="code as value, name as text"
	orderby="value asc"
	:step-searh="true"
	self-field="code"
	parent-field="parent_code"
	@change="onCitychange"
></uni-data-picker>

解决办法

需要给uni-data-picker组件设置v-model,值是area数组最后一个对象的value值,因为官方文档v-model绑定值要求的是类型是String/ Number,下面是示例代码:

<uni-data-picker	
	placeholder="请选择地址"
	popup-title="请选择城市"
	collection="opendb-city-china"
	field="code as value, name as text"
	orderby="value asc"
	:step-searh="true"
	self-field="code"
	parent-field="parent_code"
	@change="onCitychange"
	v-model="areaValue"
></uni-data-picker>

const areaValue = ref(null);
const getDetail = async () => {
	try {
		let { errCode, data } = await merchantCloudObj.detail();
		formData.value = data;
		//获取area数组最后一个value值
		areaValue.value = unref(formData).area[unref(formData).area.length - 1].value;
	} catch (err) {
		console.log(err);
	}
};
在Vue 3中使用uni-data-picker实现省市区选择可按以下步骤进行: 1. 引入插件: ```javascript import uniDataPicker from '@/uni_modules/uni-data-picker/components/uni-data-picker/keypress.js'; ``` 此步骤参考了引入插件的方式,通过该方式将uni-data-picker插件引入项目中,便于后续使用其功能实现省市区选择 [^1]。 2. 在模板中使用uni-data-picker组件: ```vue <uni-data-picker :localdata="publicImgList" v-model="goodInfo.image_id" placeholder="请选择镜像" :popup-title="pupTitle" @nodeclick="handleNodeClick"> </uni-data-picker> ``` 这里展示了uni-data-picker组件在模板中的使用示例,虽然代码里写的是选择镜像,但可以根据实际需求将其替换为省市区相关的数据和逻辑。其中,`localdata`用于绑定本地数据,`v-model`用于双向绑定选择的值,`placeholder`为占位提示信息,`popup-title`为弹窗标题,`@nodeclick`为节点点击事件 [^2]。 3. 处理可能出现的报错: 如果遇到`Uncaught TypeError: 'set' on proxy: trap returned falsish for property 'modelValue'`报错,直接去DCloud下载uni-data-picker最新的版本,因为这个无法清除的问题已经在最新版本中修复 [^3]。 4. 获取省市区ID: 在提交数据时,如果需要获取省id、城市id和地域id,可以按照以下方式处理: ```javascript formData.provinceId = formData.region[0].value; formData.cityId = formData.region[1].value; formData.regionId = formData.region[2].value; ``` 通过这种方式可以将选择的省市区对应的id提取出来,以便后续提交到服务器等操作 [^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

咸虾米_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值