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"
}
}
此前我也用过setTimeOut、nextTick异步更新,但均不能解决问题。遇事还是要先看官方文档😂!