美文网首页
VUE坑(1)二维数组动态更新问题

VUE坑(1)二维数组动态更新问题

作者: 古水木 | 来源:发表于2019-05-18 22:44 被阅读0次

1.测试vue中二维数组的动态渲染

话不多说,先上代码,如下图用vue先定义一个10X10的二维数组

<template>
  <div id="card_container">
    <div class="body">
      <div class="column" v-for="(item,i) in arr" :key="i">
        <div class="item" v-for="(jtem,j) in item" :key="j">{{jtem}}</div>
      </div>
    </div>
    <button @click="change">改变</button>
  </div>
</template>
export default {
  data() {
    return {
      arr: []
    };
  },
  created() {
    this.getNumber();
    console.log(this.arr[0][0]);
  },
  methods: {
    change() {
      this.arr.splice(0, 1, 18);
      console.log(this.arr[0][0]);
    },
    getNumber() {
      this.arr = new Array(10);
      for (let i = 0; i < 10; i++) {
         this.arr[i] = new Array(10);
         for (let j = 0; j < 10; j++) {
          this.arr[i][j] = 11;//让 arr 的所有值都为11
         }
      }
    }
  }
};

测试发现,arr[0][0]确实发生了变化,但是渲染的视图却没有动态更新。

如果把数组的第一维作为形参,传递到函数中,再执行这样的操作,发现虽然数字变了,但视图还是没用动态更新。

<template>
  <div id="card_container">
    <div class="body">
      <div class="column" v-for="(item,i) in arr" :key="i">
        <div @click="change(item,j)" class="item" v-for="(jtem,j) in item" :key="j">{{jtem}}</div>
      </div>
    </div>
  </div>
</template>
  methods: {
    change(a,i) {
      console.log(a[i]);
      a.splice(i, 1, 18);
      console.log(a[i]);
    }

2.于是测试一维数组(数组中有对象的情况),发现一维数组可以动态渲染

并比较两种改变值的方法

  1. 对象的赋值方法this.$set(this.arr[0],'test',18)
  2. 数组的赋值方法this.arr[0].splice(0,1,18)
<template>
  <div id="card_container">
    <div class="body">
      <div class="column" v-for="(item,i) in arr" :key="i">
        {{arr[i].test}}
      </div>
    </div>
    <button @click="change">点我</button>
  </div>
</template>
<script>
export default {
  data() {
    return {
      count: 10,
      arr: [],
      b:0
    };
  },
  created() {
    this.getNumber();
    console.log(this.arr[0]);
  },
  methods: {
    change() {
      this.arr.splice(0, 1, {'test':18});
      console.log(this.arr[0]);
    },
    getNumber() {
      this.arr = new Array(this.count);
      for (let i = 0; i < this.count; i++) {
        this.arr[i]={'test':11}
      }
    }
  }
};

测试发现,只有用数组的方法赋值,视图才能动态更新。

总结:

1. 二维数组的动态更新,在创建数组时,不能 用new的方式

2. 如果数组视图不能动态更新,可以手动在改数组后面加一个数组的push操作。this.arr[0].push(),这样就能保证视图的动态更新了

相关文章

网友评论

      本文标题:VUE坑(1)二维数组动态更新问题

      本文链接:https://www.haomeiwen.com/subject/uuqxzqtx.html