Vue.js - 更新的数组项值不会在页面中更新

问题描述 投票:0回答:4

“test”是我的 vue 数据中的一个对象数组

var vue = new Vue({
  el: '#content',

  data: {
    test: [
      {
        array: [0, 0, 0, 0]
      },
      {
        array: [0, 0, 0, 0]
      }
    ],
    number: 0
  },

  methods: {   
    setNumber: function(){
      this.number = 5;
    },

    setArray: function(){
      this.test[0].array[0] = 9;
    }
  }
})

问题是,如果我更改“数组”中元素的值,虽然日志显示该值已更改,但它不会在页面上更新。另一方面,如果我更改“number”的值,页面上的“number”和“array”值都会更新。

<section id="content">
  <div>Value in array: {{ test[0].array[0] }}</div>
  <div>Value in number: {{ number }}</div>
  <!-- {{ setNumber() }} -->
  {{ setArray() }}
</section>

<!-- Loading Vue.js -->
<script src="https://unpkg.com/vue"></script>
<script src="https://cdn.jsdelivr.net/vue.resource/1.3.1/vue-resource.min.js"></script>

如何使我的页面响应“数组”更新?
这是 JsFiddle:https://jsfiddle.net/zcbh4esr/

javascript arrays data-binding vue.js virtual-dom
4个回答
36
投票

这是由于数组更改警告

改为这样做

var vue = new Vue({
  el: '#content',

  data: {
    test: [{
      array: [0, 0, 0, 0]
    }, {
      array: [0, 0, 0, 0]
    }],
    number: 0
  },

  methods: {
    setNumber: function() {
      this.number = 5;
      console.log(this.number);
    },
    setArray: function() {
      //this.test[0].array[0] = 9;
      this.$set(this.test[0].array, 0, 9);
      console.log(this.test[0].array[0]);
    }
  }
});

 

这是小提琴


5
投票

来自

https://v2.vuejs.org/v2/guide/reactivity.html

var vm = new Vue({
  data: {
    items: ['a', 'b', 'c']
  }
})

//vm.items[1] = 'x' // is NOT reactive
Vue.set(vm.items, indexOfItem, newValue)  //works fine

为我工作


2
投票

不要更新数组中的项目,而是尝试这个

 this.users = Object.assign({},newList);

这将更新 DOM。


0
投票

您还可以在更改内部内容后重新创建数组/对象

this.arr[i] = new_value
this.arr= [...this.arr]
© www.soinside.com 2019 - 2024. All rights reserved.