vue2中修改对象或者数组中的属性的时候,页面数据不同步更新,这个时候需要有两种办法,第一种是:
import Vue from 'vue'
//利用Vue身上的set属性来修改
Vue.set(修改哪个对象或者数组,'键','值')
第二种就是以下 this.$set用法:
使用的场景是: 给对象或者数组里面的某个属性重新赋值
假设一个场景:控制元素的显示与隐藏,
data(){
return {
arr: [ ]
}
}
在项目中,肯定不只一行这样的数据,假如说是10行这样的数据,数组中,区分哪个时,用下角标, arr【0】 取到的就是数组第一项的值
所以说,提到数组,就是 0 : 值 , 1 : 值。。。。。。。
既然它有下角标,并且呢,可以用来区分每一项,那好,我需要的是 布尔值
this.$set( this.arr, scope.$index, true)
数组或者对象 什么属性 改成什么(除了改布尔值,还可以改成其他的)
// 前提是
beginEdit(scope) {
this.$set(this.arr, scope.$index, true)
}
// 你要传下来这个scope
v-if="arr[scope.$index]" 点击之后,把当前行 索引 变成了 true、 false,通过v-if 来控制他的显示与隐藏
通过$set 改完之后是上面图片这个样子,0 : true 1 :false ................
所以说啊,就相当于是arr = [true,false,true,true,false]
this.$set的使用场景: 给数组或对象中的属性改值, 【属性: 值,属性: 值】 {属性: 值,属性: 值} 改完之后呢,页面也要跟着同步更新----------就用this.$set ,这个场景想到用this.$set是这样的,首先我需要区分改的是哪一行,想到数组里面的下角标是可以知道是哪个的, 改完true,或者false之后,页面跟着变化
再来举个例子:
- {{ item }}
总结:
改变原数组的方法才能让v-for更新, 如果未更新, 使用this.$set()方法, 或者覆盖原目标结构