原生小程序使用miniprogram-to-uniapp v2转换成vue2,手动修改成vue3版本后,v-model失效
原生小程序使用miniprogram-to-uniapp v2转换成vue2,手动修改成vue3版本后,v-model失效
操作步骤:
将原生微信小程序miniprogram-to-uniapp v2转换成vue2,手动修改成vue3版本后,使用uni-easyinput组件或者手写组件的v-model语法
预期结果:
v-model正常使用
实际结果:
v-model不生效
this.$emit('update:modelValue', value)
emit名称中不能带符号
bug描述:
原生小程序使用miniprogram-to-uniapp v2转换成vue2,手动修改成vue3版本后,uni-easyinput组件的v-model失效,
经过排查,发现是emit的名称有符号时会失效,所以导致this.$emit('update:modelValue', value)
不起作用
项目属性 | 值 |
---|---|
产品分类 | uniapp/小程序/微信 |
PC开发环境操作系统 | Windows |
PC开发环境操作系统版本号 | 11 24H2 |
HBuilderX类型 | 正式 |
HBuilderX版本号 | 4.45 |
第三方开发者工具版本号 | 1.06.2409140 |
基础库版本号 | 3.7.9 |
项目创建方式 | HBuilderX |
2 回复
破案了,如果小程序装了插件的记得删除
删除spa-custom-hooks插件后就好了
这是一个Vue3迁移过程中常见的问题。在Vue3中,v-model的实现机制发生了变化,但uniapp在小程序环境下对事件名的处理有特殊限制。
问题核心在于小程序环境不支持事件名中包含冒号(:)等特殊字符。解决方案是改用Vue3兼容的写法:
- 对于自定义组件:
// 子组件中
this.$emit('updateModelValue', value)
// 父组件中
<component v-model:modelValue="value" />
- 对于uni-easyinput组件:
<uni-easyinput
:modelValue="value"
[@update](/user/update):modelValue="val => value = val"
/>