uniapp的input组件更新value无效,怎么解决?

45 阅读1分钟

uniapp的input组件为什么无法通过事件实现数据绑定?

uniapp编译平台:微信小程序

先看代码,这是一段通过事件绑定实现input双向数据绑定

<input
    type="number"
    :value="age"
    placeholder="请输入您的年龄"
    @input="handleInputChange"
/>

const age = ref(0)

// 校验年龄是否在0-200之间
const handleInputChange = (e:any) => {
  let maxValue = 200
  let inputAge = Number.parseInt(e.detail.value) || 0
  if (inputAge >= 0 && inputAge <= maxValue) {
    age.value = inputAge
  }else {
    age.value = 0
  }
}

这样写看似完全没问题,但奇怪的是即使更新了响应式数据,输入框中依旧是原始输入的值,显示的值不是age的值。于是我打开了uniapp官方文档,看到了这么一段话:

  • input 事件处理函数可以直接 return 一个字符串,将替换输入框的内容。仅微信小程序支持。

于是我便做了调整,下面是修改后后的代码,已经解决了我的问题:

// 校验年龄是否在0-200之间
const handleInputChange = (e:any) => {
  let maxValue = 200
  let inputAge = Number.parseInt(e.detail.value) || 0
  if (inputAge >= 0 && inputAge <= maxValue) {
    age.value = inputAge
    return ""+inputAge    // 返回字符串解决输入框中的数据更新
  }else {
    age.value = 0       // 返回字符串解决输入框中的数据更新
    return "0"
  }
}

此前我也用过setTimeOutnextTick异步更新,但均不能解决问题。遇事还是要先看官方文档😂!