说白了还是把本人绕迷了,在这里记录一下,也心愿同时能对看到这篇文章的敌人有所帮忙,祝大家技术越来越牛批!!!
进入正题
首先是父组件中,数据申请代码(axios的封装文件就不在此赘述了,本文的问题与axios没什么关系)
// 全国各省各市疫情数据申请this.$axios .post("/wapicovid19/all.php", { key: "123", }) .then((res) => { // console.log(res.data.retdata); for (let i = 0, len = res.data.retdata.length; i < len; i++) { this.province.push({ name: res.data.retdata[i].xArea, value: res.data.retdata[i].curConfirm, }); } }) // 其实这里最开始我还加了一层then。。。 // 期待上边返回的数据到位了再从新更新数据(想想刚刚谬误的时候,本人真是个**) // 其实没必要,Vue的大多数数据都是响应式的 .catch((err) => console.error(err));
接着是子组件中接管值的代码:
import chinaMap from "../utils/echarts-china";export default { name: "covid-domestic", data() { return { mapName: "", }; }, props: { propProvince: { type: Array, default: [], }, }, // 模板渲染结束先初始化地图 mounted() { this.mapName = new chinaMap(document.getElementById("map"), this.propProvince); this.mapName.generateMap(); },};
为了可能看懂子组件中的代码,我把封装的echarts文件贴在下边(封装成了一个构造函数的模式):
import echarts from 'echarts'; // echarts是4.9.0版本的import '../../node_modules/echarts/map/js/china.js';class chinaMap { // dom参数不说了,这个data参数是通过接口数据动静传入的 constructor(Dom, data) { this.option = { tooltip: { trigger: 'item', formatter: '{b}<br/>现有疫情{c}例' }, toolbox: { show: true, orient: 'vertical', left: 'right', top: 'center', feature: { dataView: { readOnly: false }, restore: {}, saveAsImage: {} } }, visualMap: { min: 800, max: 50000, text: ['High', 'Low'], realtime: false, calculable: true, inRange: { color: ['lightskyblue', 'yellow', 'orangered'] } }, series: [ { name: '中国疫情地图', type: 'map', mapType: 'china', label: { show: true }, data: data, } ] } this.dom = Dom; } // 生成地图(初始化 + 配置选项) generateMap() { echarts.init(this.dom).setOption(this.option); }}export default chinaMap;
于是乎就呈现了下边的一幕(数据确实动静更新了,然而地图仍是白板):
与此同时我简直试遍了各种方法(都是绕路而行),什么更新数据啊,async/await啊,等等等等,差点嗓子眼里冒屁。。。
拐点!
而后我就喃喃自语的在叙述这个逻辑:“嗯...我须要监听一下props的数据更新,嗯...怎么监听...监听...监听,监听!?”
哦草!!!用watch啊,监听数据的变动,被监听的数据更新时就会启动机关!!!
在子组件中加上了监听的代码:
watch: { propProvince() { this.mapName = new chinaMap(document.getElementById("map"), this.propProvince); this.mapName.generateMap(); this.mapName.eHideLoading(); },},
胜利了!!!
起初我又加上了加载动画覆盖层,调整了下数据,这个地图就完满了
完结撒花!!
还是要多积攒教训,有时候学到手里不肯定真的是本人的,得碰个壁,而后记忆加深,当前再触碰到这个伤疤时,你一下就能记得过后的痛和解决方案!!!