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

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(),这样就能保证视图的动态更新了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,550评论 1 32
  • 第四天 数组【悟空教程】 第04天 Java基础 第1章数组 1.1数组概念 软件的基本功能是处理数据,而在处理数...
    Java帮帮阅读 1,667评论 0 9
  • 1.设计模式是什么? 你知道哪些设计模式,并简要叙述?设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类型...
    龍飝阅读 2,293评论 0 12
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 28,568评论 1 45
  • 一:什么是闭包?闭包的用处? (1)闭包就是能够读取其他函数内部变量的函数。在本质上,闭包就 是将函数内部和函数外...
    xuguibin阅读 10,002评论 1 52

友情链接更多精彩内容