原生小程序使用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

Image 1
Image 2
Image 3
Image 4
Image 5


2 回复

破案了,如果小程序装了插件的记得删除 删除spa-custom-hooks插件后就好了


这是一个Vue3迁移过程中常见的问题。在Vue3中,v-model的实现机制发生了变化,但uniapp在小程序环境下对事件名的处理有特殊限制。

问题核心在于小程序环境不支持事件名中包含冒号(:)等特殊字符。解决方案是改用Vue3兼容的写法:

  1. 对于自定义组件:
// 子组件中
this.$emit('updateModelValue', value)

// 父组件中
<component v-model:modelValue="value" />
  1. 对于uni-easyinput组件:
<uni-easyinput 
  :modelValue="value"
  [@update](/user/update):modelValue="val => value = val"
/>
回到顶部