【问题标题】:Vue updating the value after a page refresh页面刷新后Vue更新值
【发布时间】:2025-12-19 20:25:10
【问题描述】:
<v-layout row wrap>
  <v-flex class="hidden-sm-and-down" md4>
    <v-subheader class="fields">Select Venue</v-subheader>
  </v-flex>
  <v-flex xs12 md8>
    <v-select class="select__box" :items="venues" v-model="venue" item-text="name" item-value="_id" label="Select Venue" prepend-icon="edit_location" autocomplete :error-messages="venueErrors" @blur="delayTouch($v.venue,200)" @input="delayTouch($v.venue,200)"></v-select>
  </v-flex>
</v-layout>


created: async function() {
  try {
    let response = await CommonRequest.getVenues();
    let array = response.data.venues;
    let i = 0;
    for (let ven of array) {
      this.venues[i] = Object.assign({}, this.venues, {
        name: ven.name,
        _id: ven._id
      });
      i++;
    }
  } catch (error) {
    if (error) console.log(error);
  }
}       

这里的场所列表 id 仅在我刷新页面后才会更新。即使数据是之前到达的(就像我使用 console.log(this.venues) 检查数据是否到达一样)

【问题讨论】:

    标签: vuejs2 vue-directives


    【解决方案1】:

    docs 中所述,直接分配数组元素不是反应式的。

      this.venues[i] = Object.assign({}, this.venues, {
        name: ven.name,
        _id: ven._id
      });
    

    你可以这样做

      this.$set(this.venues, i, Object.assign({}, this.venues[i], {
        name: ven.name,
        _id: ven._id
      }));
    

    请注意,您的原始代码也缺少Object.assign 的第二个参数中的索引

    【讨论】:

    • ` 创建:async function() { try { let response = await CommonRequest.getVenues();让数组 = response.data.venues;让我 = 0; for (let ven of array) { this.$set( this.venues, i, Object.assign({}, this.venues[i], { name: ven.name, _id: ven._id }) );我++; } } catch (error) { if (error) console.log(error); } } ` 仍然无法正常工作
    • 我已经在数据中设置了场地:[]
    • 这是滴答问题(vue 异步更新 DOM)但如果它不应该在调用更新补丁时自动更新内容?