el-input 组件无法实时更新数据

本文探讨了在Vue项目中遇到的el-input组件因嵌套过深而导致的数据更新延迟问题。详细介绍了如何通过监听@input事件并使用this.$forceUpdate()来解决视图更新不及时的难题。

el-input组件因为嵌套太深而无法实时更新数据

今天在做项目的时候发现了这个问题。
这个问题是因为组件的嵌套太深,导致vue无法检测到视图的更新,即使实现了双向绑定也没有用。
在看了许多其他人的博客后,发现这个问题目前只能用强制刷新解决。

方法如下:
通过 el-input 组件的 @input 事件,监听键盘输入获取当前输入的值
在这里插入图片描述
然后使用 this.$forceUpdate() 进行视图强制刷新
在这里插入图片描述

主要参考博客链接: https://blog.youkuaiyun.com/hailangtuteng/article/details/96904845.

在使用 `el-input-number` 组件时,若希望**实时获取输入的数据**,可以通过监听原生的 `input` 事件来实现。由于 `@change` 事件仅在输入框失去焦点(blur)时触发,因此无法满足实时监听的需求。 可以按照以下方式实现: 1. 将 `@change` 替换为 `@input.native`,从而监听输入框的实时变化: ```html <el-input-number v-model="row.energy" @input.native="handleInput(row, $index)" :precision="3" :min="0" :max="10000000000" :ref="'ref' + $index" ></el-input-number> ``` 2. 在 `handleInput` 方法中,通过 `$refs` 获取当前输入框的实时值,并将其重新赋值给绑定的对象属性: ```javascript handleInput(row, index) { row.energy = this.$refs['ref' + index].displayValue; } ``` 这样即可实现在用户输入时立即获取到最新的数值[^1]。 ### 限制输入格式 如果需要进一步限制 `el-input-number` 的输入格式,例如只允许输入正整数或保留两位小数,可以结合 `@input` 事件和额外的处理逻辑。 #### 限制输入为正整数 使用 `:min="0"` 可以设置最小值为 0,但不能阻止用户输入小数。为了确保输入的是整数,可以在 `@input.native` 或 `@change` 中加入判断逻辑: ```javascript handleInput(row, index) { const value = this.$refs['ref' + index].displayValue; if (!Number.isInteger(Number(value))) { this.$message.error('请输入正整数'); row.energy = 0; // 或者回退至上一次合法值 } else { row.energy = Number(value); } } ``` #### 限制小数点后两位 如果希望限制输入为最多两位小数,可以在 `@input.native` 中对输入值进行截取处理: ```javascript handleInput(row, index) { let value = this.$refs['ref' + index].displayValue; if (value.includes('.')) { value = value.substring(0, value.indexOf('.') + 3); // 保留两位小数 } row.energy = value; } ``` ### 示例代码 以下是一个完整的示例,展示如何实时获取输入值并限制其为最多两位小数: ```html <template> <el-input-number v-model="row.energy" @input.native="handleInput(row, $index)" :precision="2" :min="0" :max="100000" :ref="'ref' + $index" ></el-input-number> </template> <script> export default { data() { return { row: { energy: 0 }, $index: 0 }; }, methods: { handleInput(row, index) { let value = this.$refs['ref' + index].displayValue; if (value.indexOf('.') >= 0) { value = value.substring(0, value.indexOf('.') + 3); } row.energy = value; } } }; </script> ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值