You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue:v-for输入框经setTimeout修改数组后v-model未更新求助

解决Vue中v-model在setTimeout后不更新的问题

这个问题的核心是Vue无法检测到数组通过索引直接修改元素的操作,再加上你用了setTimeout的异步延迟,导致v-model绑定的输入框没能同步更新。下面给你两种可行的解决方案:

方案1:使用this.$set触发响应式更新

Vue提供了$set方法(或者全局的Vue.set),专门用来处理对象/数组的响应式更新,确保修改能被Vue的响应式系统检测到。修改你的ensureRoundHours方法:

ensureRoundHours(value, i) {
  setTimeout(() => {
    if (value < 0.5) {
      value = 0.5;
    }
    // 用$set替代直接索引赋值
    this.$set(this.raforditashour, i, value);
  }, 2000);
}

方案2:使用数组的变异方法splice

数组的splice方法属于Vue能自动检测到的变异方法之一,通过它修改数组元素同样能触发视图更新:

ensureRoundHours(value, i) {
  setTimeout(() => {
    if (value < 0.5) {
      value = 0.5;
    }
    // 用splice替换指定索引的元素
    this.raforditashour.splice(i, 1, value);
  }, 2000);
}

为什么原来的写法不生效?

Vue的响应式系统在处理数组时,会对数组的原生方法(比如push、pop、splice等)进行包装,从而能检测到这些方法导致的数组变化。但**直接通过索引修改数组元素(this.raforditashour[i] = value)**属于Vue无法自动检测的操作,所以即使你修改了数组的值,视图也不会同步更新。

而上面两种方案都是通过Vue能识别的方式修改数组,所以v-model绑定的输入框就能正确更新了。

内容的提问来源于stack exchange,提问作者user9268258

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:07:00