在使用v-for,遇到三种情况。
情况一:想将数组翻转
情况二:单独截取数组中某个值
情况三:更新数组中某个值
但v-for方法在遇到原数组改变的时候才会监测到,并实现。
例如这些方法
会改变原数组的值时。会被V-for监测到。
但如果你使用
filter(),concat()和slice()会返回一个新数组,对原数组没有影响,就不会导致v-for更新,页面也就不会更新。
我们就可以使用一个函数去接收新数组,并将其赋值给原数组。这样就会是v-for更新。
例子:
//数组slice方法不会造成v-for更新
this.arr.slice(0,3)
//为了解决v-for更新,覆盖原始数组
let newArr = this.arr.slice(0,3)
this.arr = newArr
还有一种情况,当我们想改变数组中某个值的时候。单独赋值时,v-for也是监测不到的。需要使用this.$set()
例子:
//单独赋值,无用
this.arr[0]=1000;
使用 this.$set( )有三个参数
参数一:更新目标结构
参数二:更新位置
参数三:更新的数值
例子,this.$set(this.arr,0,1000)
总结:
数组变更方法,会导致v-for的更新,页面更新。
数组非变更方法,返回新数组,就不会导致v-for更新,可以采用覆盖数组或者this.$set()