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

Vue中如何通过v-model访问并自动创建嵌套对象

Vue.js中v-model绑定嵌套对象的问题解决

问题原因

直接使用v-model="consumption[month].rush_hour"会报错,核心原因是:你的consumption初始是空对象,consumption[month]这个子对象还未创建,Vue无法直接给不存在的对象添加深层属性,导致双向绑定失败。

解决方案

方案1:初始化时预创建嵌套结构(推荐)

在data初始化阶段,就为每个月份生成对应的嵌套对象结构,让v-model能直接绑定到已有属性上,这是最省心的方式。

修改你的JS代码:

var app = new Vue({
    el: "#app",
    data() {
        const months = ['Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro'];
        
        // 批量生成每个月份的空结构
        const buildMonthData = () => {
            return months.reduce((result, month) => {
                result[month] = { rush_hour: '', normal_hour: '' };
                return result;
            }, {});
        };

        return {
            months,
            consumption: buildMonthData(),
            energy: buildMonthData(),
        }
    }
})

你的HTML代码不需要修改,直接保持原来的v-model绑定即可,输入内容时会自动填充到对应的嵌套属性里。

方案2:动态创建嵌套对象(适合按需生成场景)

如果不想提前初始化所有月份的结构,可以在输入事件中先判断并创建子对象,确保属性存在后再绑定:

先修改HTML中的input(以consumption的rush_hour为例):

<input type="text" class="form-control" inputmode="decimal" 
       @input="makeSureMonthObj(consumption, month)"
       v-model="consumption[month].rush_hour">

然后在Vue实例中添加methods:

var app = new Vue({
    el: "#app",
    data() {
        return {
            months: ['Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro'],
            consumption: {},
            energy: {},
        }
    },
    methods: {
        makeSureMonthObj(targetObj, month) {
            // 若当前月份的子对象不存在,用$set创建(保证响应式)
            if (!targetObj[month]) {
                this.$set(targetObj, month, { rush_hour: '', normal_hour: '' });
            }
        }
    }
})

效果验证

采用方案1后,输入数据时会自动生成你期望的嵌套结构:

{
  "consumption": {
    "Janeiro": {
      "rush_hour": "1",
      "normal_hour": "2"
    },
    "Fevereiro": {
      "rush_hour": "1",
      "normal_hour": "2"
    }
    // 其余月份结构同理
  },
  "energy": {
    "Janeiro": {
      "rush_hour": "1",
      "normal_hour": "2"
    }
    // 其余月份结构同理
  }
}

内容的提问来源于stack exchange,提问作者R. bell

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 14:20:35