表格
点击详情后的弹窗
/*我在这里实现了一个表格,表格每一列有一个详情按钮,点击后就调用handleDetail(row)函数,传过来的就是那一列的所有数据,也就是一条费用的详情信息*/
/*这里是一个弹窗,里面就展示一条费用的详情信息,也就是渲染costInfo视图的地方*/
export default {
data() {
return{
// 一条费用的详情信息
costInfo: [{}],
},
methods:{
// 查看详情
handleDetail(row) {
this.detailVisible = true;
//下面的代码中,我在疯狂地通过下标改数组costInfo的值-----
this.costInfo[0] = { ...row };
this.costInfo[0].paymentStatusText =this.costInfo[0].paymentStatus == 1 ? "已缴费" : "未缴费";
this.costInfo[0].AllAmount =this.costInfo[0].pricing * this.costInfo[0].costNum;
console.log(this.costInfo);//这里打印costInfo
},
}
}
这里我就发现,当我点击不同的费用时,打印出来的costInfo是不同的,但是弹窗中的内容竟然是相同的。造成的原因就是数据更新了,视图没有更新。
使用this.$set()——this.$set 是Vue中的一个实例方法,用于在响应式对象上设置新的属性或修改已有的属性,并确保这些属性也是响应式的。
// 查看详情
handleDetail(row) {
this.detailVisible = true;
//下面的代码中,我在疯狂地通过下标改数组costInfo的值-----
this.costInfo[0] = { ...row };
this.costInfo[0].paymentStatusText =this.costInfo[0].paymentStatus == 1 ? "已缴费" : "未缴费";
this.costInfo[0].AllAmount =this.costInfo[0].pricing * this.costInfo[0].costNum;
console.log(this.costInfo);//这里打印costInfo
//强制视图刷新**
this.$set(this.costInfo, 0, this.costInfo[0]);
}
**补充**
定义普通数组:
twoArr: [11, 22, 33, ]
基本语法:
this.$set(twoArr,0,55)
console.log(twoArr)//[55,22,33]
定义数组包对象:
arr: [
{ name: "小王", age: 18 },
{ name: "小张", age: 20 },
],
基本语法:
this.$set(arr,1,{ name: "小李", age: 50 })
console.log( [
{ name: "小王", age: 18 },
{ name: "小李", age: 50},
])
定义数组包对象:
arr: [
{ name: "小王", age: 18 },
{ name: "小张", age: 20 },
],
let reslg = this.arr.length;
2. 然后添加在数组末尾
this.$set(this.arr,reslg,{name:小美,age:18})
//控制台输出
arr: [
{ name: "小王", age: 18 },
{ name: "小张", age: 20 },
{ name: "小美", age: 18 },
]