【问题标题】:Vue not updating when data changes.数据更改时 Vue 不更新。
【发布时间】:2018-10-03 12:43:12
【问题描述】:

我遇到了一个奇怪的问题,当我在 Vue 实例中更改数据时,HTML 没有更新:

CodePen

HTML:

<div class="favourites-panel__wrapper" id="app">
  <ul>
    <li v-for="(vehicle, index) in vehicles">{{ vehicle.id }}</li>
  </ul>
  <a href="javascript:void(0);" v-on:click="add()">Add</a>
</div>

JavaScript:

window.panel = new Vue({
    el: '#app',
    data: {
        vehicles: {}
    },
    created: function() {

        // Create dummy vehicles
        for (var i = 0; i < 4; i++) {
            this.vehicles[i] = this.dummy(i);
        }

    },
    methods: {
      add: function() {
        let index = Object.keys(this.vehicles).length;
        let dummy = this.dummy(index);

        this.vehicles[Object.keys(this.vehicles).length] = dummy;
      },
      dummy: function(i) {
        return {
          'dummy': true,
          'body': 'loading',
          'fuel_type': 'loading',
          'gearbox_type': 'loading',
          'id': 'loading' + i,
          'image': '/assets/images/themev2/compare-dummy.gif',
          'image_id': 'loading',
          'make': 'loading',
          'model': 'loading',
          'location_name': 'loading',
          'variant': 'loading',
          'web_price': 'loading'
        }
      }
    }
});

【问题讨论】:

    标签: javascript vue.js


    【解决方案1】:

    使用

    Vue.set(this.vehicles, Object.keys(this.vehicles).length, dummy);
    

    插入

    this.vehicles[Object.keys(this.vehicles).length] = dummy;
    

    【讨论】:

    • 这似乎可行,我为什么需要使用Vue.set,在文档示例中我可以像往常一样添加一个对象?是因为我的vehicles 数据是对象而不是键? vuejs.org/v2/guide/list.html
    • Vue 不允许将新的根级反应属性动态添加到已创建的实例中。但是,可以使用 Vue.set(object, key, value) 方法向嵌套对象添加反应属性:来自官方文档。 vuejs.org/v2/guide/reactivity.html
    • Caveats:: 由于 JavaScript 的限制,Vue 无法检测到数组的以下更改: 当您直接设置带有索引的项目时,例如vm.items[indexOfItem] = newValue 当你修改数组的长度时,例如vm.items.length = newLength
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-24
    • 2021-11-06
    • 1970-01-01
    • 2023-01-10
    • 2018-05-09
    • 2018-04-22
    • 1970-01-01
    相关资源
    最近更新 更多