uni-app 微信小程序编译时 v-for 中自定义组件使用 v-model 值传递失败,uni-easyinput 中 value 的 watch 监听不会触发
uni-app 微信小程序编译时 v-for 中自定义组件使用 v-model 值传递失败,uni-easyinput 中 value 的 watch 监听不会触发
产品分类:
uniapp/小程序/微信
PC开发环境操作系统:
Windows
PC开发环境操作系统版本号:
x64
HBuilderX类型:
正式
HBuilderX版本号:
3.1.2
第三方开发者工具版本号:
1.05.21
基础库版本号:
2.4.3
项目创建方式:
HBuilderX
示例代码:
<uni-forms-item :label="prop.showLabel?field.title:''" :required="!!(field.rules&&field.rules.required)" :name="field.fields"
v-for="(field,index) in formFields" :key="index">
<view v-if="['select'].indexOf(field.type)>-1'" class="code">
<view style="flex:1">
<uni-easyinput :inputBorder="!!prop.border" type="text" v-model="forms[field.fields]" @input="onInput($event,field.fields)"
:placeholder="'请输入'+field.title" @focus="focus" @blur="blur"></uni-easyinput>
</view>
<view class="verify">
<verify-code :mobile="forms[field.fields]" :send-type="field.verify||0"></verify-code>
</view>
</view>
</uni-forms-item>
操作步骤:
直接随便写个uni-forms-item 循环,里面嵌套 uni-easyinput 使用v-model 绑定传入值,传入值,使用对象key 值传递,同时v-if 的条件使用判断 例如:[‘select’].indexOf(field.type)>-1
预期结果:
使用v-model uni-easyinput 会自动触发验证
实际结果:
使用v-model uni-easyinput 中的watch value 不会触发,导致验证不会触发
bug描述:
使用v-for 循环自定义组件 v-model 绑定编译的值存在问题直接使用:value 绑定 编译多了一个$orig 使用v-model 编译出来的就没有,导致传值失败, 导致uni-easyinput 中的watch : value 不会触发,验证也就触发不了 , 判断里面增加一个表达式导致的

更多关于uni-app 微信小程序编译时 v-for 中自定义组件使用 v-model 值传递失败,uni-easyinput 中 value 的 watch 监听不会触发的实战教程也可以访问 https://www.itying.com/category-93-b0.html
遇到相同问题,求解决
同样问题
同样问题,求解决方案
转微信小程序,我也遇到了,通过再次把父组件中的值,通过 props 再次传入uni-easyinput 组件中实现的,项目紧张先这样吧
《props》
twovalue: {
type: [Number, String],
default: ‘’
},
《watch》
// #ifdef H5 || MP-WEIXIN
twovalue(newVal) {
this.value = newVal;
},
// #endif
直接用 :modelValue更好
改成这样就好了 v-model=“forms[formFields[index].fields]”
这是一个在uni-app微信小程序中使用v-for循环自定义组件时v-model绑定失效的典型问题。主要原因是微信小程序编译时对v-model的处理机制与H5端不同。
问题分析:
- 在微信小程序环境下,v-for循环中使用v-model绑定对象属性时,编译后会产生额外的$orig属性
- 这导致uni-easyinput组件的value watch无法正确触发
- 验证功能也因此无法正常工作
解决方案:
- 使用:value和@input替代v-model:
<uni-easyinput
:inputBorder="!!prop.border"
type="text"
:value="forms[field.fields]"
[@input](/user/input)="val => forms[field.fields] = val"
@focus="focus"
@blur="blur">
</uni-easyinput>
- 或者在data中预定义好对象结构,避免动态属性:
data() {
return {
forms: {
// 预定义所有可能用到的字段
field1: '',
field2: ''
}
}
}


