今天用vue
+echarts
做词云图的时候,发现拿不到json格式的数据,这里主要有两个点:
1.在vue
中使用this
拿到data
中的数据,然后给它赋值的话,得到的数据是[__ob__: Observer]
格式 。
2.[__ob__: Observer]
格式是vue
对数据设置的监控器,双向绑定,不可以枚举。
先看一下我一开始使用push
方法的代码:
//objGroup是我转换为{"":"","":"","":"",......}这种形式的数据
for (let key in objGroup) {
//使用temp1实现将objGroup分为多个对象
let temp1 = {};
temp1.name = key;
temp1.value = objGroup[key];
this.dataJson.push(temp1);
console.log(this.dataJson)
}
结果如图,得到的是[__ob__: Observer]
格式的数据,但是在这里有点不确定是因为push
还是因为用了this
。
所以我新定义一个空数组temp2
,仅仅使用push
方法,测试数据还能否变为[__ob__: Observer]
格式,代码如下:
let temp2 = [];
for (let key in objGroup) {
let temp1 = {};
temp1.name = key;
temp1.value = objGroup[key];
temp2.push(temp1)
console.log(temp2)
}
结果如图,说明不是push
的问题,那就是this
的问题了。
然后再使用this
来测试一下,代码如下,我先用temp2
拿到想要的数据,然后直接将temp2
赋值给dataJson
:
let temp2 = [];
for (let key in objGroup) {
let temp1 = {};
temp1.name = key;
temp1.value = objGroup[key];
temp2.push(temp1)
console.log(temp2)
}
this.dataJson = temp2;
console.log(this.dataJson)
结果如图,我看到了不仅dataJson
变为了[__ob__: Observer]
格式,连temp2
也变成了[__ob__: Observer]
格式,因此这里就非常明显的说明了vue
的双向绑定数据功能。
查找解决办法,找到一个如下代码,使用JSON.parse(JSON.stringify(temp2))
进行深拷贝,博主说可以获取原始数据对象,但是,我试了之后,发现是temp2
的数据没有被改为[__ob__: Observer]
格式,dataJson
仍然是[__ob__: Observer]
格式。
let temp2 = [];
for (let key in objGroup) {
let temp1 = {};
temp1.name = key;
temp1.value = objGroup[key];
temp2.push(temp1)
console.log(temp2)
}
this.dataJson = JSON.parse(JSON.stringify(temp2));
console.log(this.dataJson);
结果如图:
改不了dataJson
的格式,但是使用插值语法让template
展示的dataJson
是需要的数据格式。
所以,我就把数据交给vue
让它自己改数据格式去展示,也就是将画词云图的方法放在获取数据的方法里面,然后使用插值语法调用获取数据的方法。