最近遇到一个问题,我在data函数里的引用数据类型数据,我在自己的方法里面去改变该对象的值,没有触发updated函数
data() {
return {
option: {
color: ["#2086cb"],
title: {
text: "加班工时统计",
},
grid: {
left: "50px",
},
xAxis: {
type: "value",
},
yAxis: {
type: "category",
data: [],
},
series: {
data: [],
type: "bar",
},
},
};
},
- 很明显option这个引用数据类型里面有好几层,那么不管是我直接改变option的第几层,都无法触发updated函数。这涉及到变量的基础数据类型和引用数据类型的问题。基础数据类型,如果你给变量赋值,那变量保存的值就是这个值。引用数据类型,保存的这是这个值的内存地址,所以你每次改变对象里面的属性里面的值,但是保存在变量中的内存的地址没有变化,因此不触发updated。那么怎样做可以触发updated函数呢?
//可以直接用Object.assign()来生成一个新对象并替换前面的对象。
Object.assign(
{},
{
color: ["#2086cb"],
title: {
text: "加班工时统计",
},
grid: {
left: "50px",
},
xAxis: {
type: "value",
},
yAxis: {
type: "category",
data: [],
},
series: {
data: [1,2,3,4,5],
type: "bar",
},
}
)
//但是我这个需要改变的只是这个对象很深的一小部分属性的值,还要复制那么多完全不用改变的值,实在很麻烦。那就使用watch深度监听option,不要用updated了
watch: {
option: {
handler(newVal) {
if (!this.myChart) {
this.setEchart();
}
this.chartChange();
},
deep: true,
},