最近跟着b站博主自学使用Echarts的地图中,发现拖动筛选条
看了下代码好像没什么问题
<template>
<div class="chinaMap" id="chinaMap"></div>
</template>
<script>
let mapData = require("@/assets/json/china.json");
export default {
data() {
return {
chinaMap: null,
option: {},
airData: [
{ name: "北京", value: 39 },
{ name: "天津", value: 39 },
{ name: "上海", value: 31 },
{ name: "重庆", value: 66 },
{ name: "河北", value: 147 },
{ name: "河南", value: 113 },
{ name: "云南", value: 25 },
{ name: "辽宁", value: 50 },
{ name: "黑龙江", value: 114 },
{ name: "湖南", value: 175 },
{ name: "安徽", value: 117 },
{ name: "山东", value: 92 },
{ name: "新疆", value: 84 },
{ name: "江苏", value: 67 },
{ name: "浙江", value: 84 },
{ name: "江西", value: 96 },
{ name: "湖北", value: 273 },
{ name: "广西", value: 59 },
{ name: "甘肃", value: 99 },
{ name: "山西", value: 39 },
{ name: "内蒙古", value: 58 },
{ name: "陕西", value: 61 },
{ name: "吉林", value: 51 },
{ name: "福建", value: 29 },
{ name: "贵州", value: 71 },
{ name: "广东", value: 38 },
{ name: "青海", value: 57 },
{ name: "西藏", value: 24 },
{ name: "四川", value: 58 },
{ name: "宁夏", value: 52 },
{ name: "海南", value: 54 },
{ name: "台湾", value: 88 },
{ name: "香港", value: 66 },
{ name: "澳门", value: 77 },
{ name: "南海诸岛", value: 55 },
], // 空气数据
scatterData: [
{
value: [117, 31],
},
], // 标记点数据
timer: null,
};
},
mounted() {
this.test();
},
methods: {
test() {
let that = this;
// 注册地图矢量数据
that.$echarts.registerMap("chinaMap", mapData);
that.option = {
geo: {
type: "map",
map: "chinaMap", // chinaMap需要和registerMap中的第一个参数保持一致
roam: true, // 设置允许缩放以及拖动的效果
label: {
show: true, // 展示标签
},
},
series: [
{
data: that.airData,
geoIndex: 0, // 将空气质量的数据和第0个geo配置关联在一起
type: "map",
},
],
visualMap: {
min: 0,
max: 300,
inRange: {
color: ["white", "red"], // 控制颜色渐变的范围
},
calculable: true, // 出现滑块
},
};
that.chinaMap = this.$echarts.init(document.getElementById("chinaMap"));
that.chinaMap.setOption(that.option);
console.log(that.chinaMap);
},
},
destroyed() {
this.timer = null;
},
};
</script>
最后发现原来是 需要将
that.chinaMap = this.$echarts.init(document.getElementById("chinaMap"));
that.chinaMap.setOption(that.option);
改为
let chinaMap = this.$echarts.init(document.getElementById("chinaMap"));
chinaMap.setOption(that.option);
原因不知道,希望有知道的能告知!
你chinaMap定义在data中,初次渲染图表是没问题的,你拖动就发生了数据变化,而此时无法更新到this.chinaMap 中去了呢;所以你的chinaMap是得定义在方法内的
用let和this都是可以的,原因是因为你定义的中国地图的变量为啥不用“”
早上醒来研究了一下,发现第一种this写法在vue3里面是一个proxy对象,所以就裂开了,还不知道怎么解决
let 的写法才是一个echarts实例: