vue2Wie kapselt man die Echarts-Karte elegant in das Projekt ein? Der folgende Artikel stellt Ihnen die elegantere Möglichkeit vor, die Echarts-Karte in das vue2-Projekt einzubinden. Ich hoffe, er wird Ihnen hilfreich sein!
Ich habe bereits geschrieben Eine elegantere Möglichkeit, E-Charts im Vue-Projekt zu kapseln In der Großbildvisualisierung wird neben der sehr häufigen Verwendung von Datendiagrammen auch die Anzeige von Provinz- und Stadtkartenbereichen sehr häufig verwendet . Dies ist ein Begleitartikel. [Verwandte Empfehlungen: vuejs-Video-Tutorial]
Bei der Auswahl eines Gebiets auf einer regionalen Karte ist ein Popup-Fenster erforderlich, um Daten anzuzeigen. Es gibt verschiedene Stile, verschiedene Anordnungen von Daten, Grafik- und Text-Mashups, Videos. .hier wird neben der Kapselung des regionalen Kartenmoduls auch die Implementierung benutzerdefinierter Popup-Fenster und die Möglichkeit zum dynamischen Laden von Schnittstellendaten in benutzerdefinierten Popup-Fenstern vorgestellt
vue2
cli3 , echarts 5
vue2
、vue cli3
、echarts 5
先上个效果图吧,说明下实现的效果。
5.x
以下版本和5.x
以上版本引入的区别5.x
以下版本import echarts from 'echarts'
5.x
以上版本import * as echarts from 'echarts'
vue.config.js
中开启运行时编译功能runtimeCompiler: true
|-- public |-- data |-- 4401.json |-- mapdata.json |-- images |-- map-ic.png
4401.json
是广州区域的geojson
数据,用来给echarts
显示广州的区域地图mapdata.json
是模拟接口请求的假数据,自己随便自定义了,在获取数据后,看情况处理下传到封装好的echarts地图模块就行,这里模拟接口请求的知识可参考这里: https://juejin.cn/post/6995147964427534373/map-ic.png
地图自定义弹窗用到的图片|-- src |-- components |-- chart |-- options // 存放各种图表的option |-- map // 地图option |-- index.js
具体代码如下:
import * as echarts from 'echarts' const getSimpleMap = (jsonMap, data, config) => { if (!echarts.getMap(jsonMap.mark)) { echarts.registerMap(jsonMap.mark, jsonMap.json) } const defaultConfig = { tooltip: { // 窗口外框 trigger: 'item', padding: 0, borderWidth: 0, borderColor: '#FFFFFF', backgroundColor: '#FFFFFF', formatter: (params) => { const { data } = params const str = `` return str } }, geo: { map: jsonMap.mark, type: 'map', layoutCenter: ['50%', '50%'], layoutSize: '150%', zoom: 0.65, roam: false, itemStyle: { normal: { areaColor: 'rgba(201, 229, 255, 1)', shadowColor: 'rgba(142, 201, 255, 1)', shadowOffsetX: -5, shadowOffsetY: 12 } } }, series: [ { type: 'map', map: jsonMap.mark, // 自定义扩展图表类型 zoom: 0.65, // 缩放 animationDuration: 1200, itemStyle: { // 地图样式 normal: { borderColor: '#FFFFFF', borderWidth: 3, areaColor: 'rgba(201, 229, 255, 1)' } }, label: { show: true, color: '#666666', fontSize: 12, fontWeight: 400 }, emphasis: { // 鼠标移入动态的时候显示的默认样式 label: { show: true, color: '#FFFFFF', fontSize: 15, fontWeight: 600 }, itemStyle: { areaColor: 'rgba(102, 182, 255, 1)', borderColor: '#FFFFFF', borderWidth: 2 } }, layoutCenter: ['50%', '50%'], layoutSize: '150%', data: data } ] } const opt = Object.assign({}, defaultConfig, config) const { legend, tooltip, series, geo, grid } = opt const chartOpt = { grid, legend, tooltip, geo, series } return chartOpt } export default { getSimpleMap }${data.name}区号:${data.hoverObj == null ? '' : data.hoverObj.adcode}
自定义弹窗主要是在tooltip
的formatter
里面实现,自定义好html
弹窗,把params
里要显示的数据显示到对应的地方就OK了。
个人喜欢直接纯html
实现好设计给的弹窗样式,然后直接复制到formatter
里面。每次遇到不同的设计,就修改下formatter
里面的html
和匹配下要显示的数据就行了。这里可以进一步封装的,有兴趣的可以试试。
<chart-view class="map-view" :chart-option="mapOpt" height="100%" @click="handleMapClick" />
:chart-option="mapOpt"
这个是给封装的echarts
地图模块的传参,接口数据要经过处理,具体看下一节@click="handleMapClick"
这里是点击地图时,对应区域的数据,用于有下一步的操作,例如地图下钻initMap(url) { mapRequest(url).then((res) => { const mapData = res.data const jsonMap = { mark: this.mapName, json: mapData } const data = mapData.features.map((item) => { const { name, adcode } = item.properties let hoverObj = {} const objIndex = findElem(this.mapPopData, 'adcode', adcode) if (objIndex !== -1) { hoverObj = this.mapPopData[objIndex] } else { hoverObj = null } return { name, hoverObj: hoverObj } }) this.mapOpt = this.$eChartFn.getSimpleMap(jsonMap, data) }).catch((err) => { console.log(err, '加载地图失败') }) }
这里对地图geojson
数据和接口返回数据进行匹配处理,达到弹窗数据是对应地区数据的效果。
地图geojson
数据是必有adcode
字段的,所以接口数据mapPopData
最好也是加上此字段,用来匹配。
上面代码里的hoverObj
是匹配好的每个区域的数据,最终形成数组data
,通过以下代码给封装的echarts
模块传参
this.mapOpt = this.$eChartFn.getSimpleMap(jsonMap, data)
具体代码可以参考echartMapTest
文件夹里面的index.js
文件
涉及的文件如下(具体参考代码
5.x
und niedriger in Vue und 5.x
In den obigen Versionen eingeführte Unterschiede5.x
Versionen niedriger|-- public |-- data |-- 4401.json |-- mapdata.json |-- images |-- map-ic.png |-- src |-- api |-- map.js // 获取地图geojson数据、地图弹窗接口模拟数据 |-- components |-- chart |-- index.vue // 图表单文件组件,供界面调用 |-- index.js // 实现自动化导入options里的图表option |-- options // 存放各种图表的option |-- map // 地图option |-- index.js |-- views |-- echartMapTest // 实例所在 |-- index.vue |-- index.scss |-- index.js |-- utils |---utils.js |-- main.js // 全局引入echarts图表
5.x
oder höhervue.config.js
Laufzeitkompilierungsfunktion4401 .json
sind die geojson
-Daten der Region Guangzhou, Wird verwendet, um die regionale Karte von Guangzhou in echarts
🎜🎜2, mapdata.json
anzuzeigen. Es handelt sich um gefälschte Daten, die von der simulierten Schnittstelle angefordert werden. Sie können sie nach Belieben anpassen Informationen zu simulierten Schnittstellenanforderungen finden Sie hier: https://juejin.cn /post/6995147964427534373/🎜🎜3 -ic.pngBilder, die im benutzerdefinierten Karten-Popup-Fenster verwendet werden🎜formatter
von tooltip
implementiert, und die Anpassung erfolgt im html</ code>Popup-Fenster , zeigen Sie die anzuzeigenden Daten in <code>params
an der entsprechenden Stelle an und es ist in Ordnung. 🎜🎜Persönlich möchte ich den entworfenen Popup-Fensterstil direkt mit reinem html
implementieren und ihn dann direkt in formatter
kopieren. Jedes Mal, wenn Sie auf ein anderes Design stoßen, ändern Sie einfach den html
im formatter
und passen Sie die anzuzeigenden Daten an. Es kann hier weiter gekapselt werden. Wenn Sie interessiert sind, können Sie es versuchen. 🎜 :chart-option="mapOpt"
Dies dient der Kapselung von echarts code>Die vom Kartenmodul übergebenen Parameter, die Schnittstellendaten müssen verarbeitet werden, Einzelheiten finden Sie im nächsten Abschnitt🎜🎜2 @click="handleMapClick"
Hier sind die Daten des entsprechenden Bereichs Wenn auf die Karte geklickt wird, wird sie für den nächsten Vorgang verwendet, z. B. einen Karten-Drilldown.🎜Schnittstellendatenverarbeitung
rrreee🎜Hier ist der Karten-geojson
Daten- und Schnittstellenrückgabe Die Daten werden abgeglichen und verarbeitet, um den Effekt zu erzielen, dass die Popup-Daten die Daten der entsprechenden Region sind. 🎜🎜Die Kartendaten geojson
müssen das Feld adcode
haben, daher ist es am besten, dieses Feld zum Abgleich zu den Schnittstellendaten mapPopData
hinzuzufügen.
Das hoverObj
im obigen Code sind die übereinstimmenden Daten jedes Bereichs und bilden schließlich ein Array data
, das an das gekapselte echarts
-Modul übergeben wird durch den folgenden Code 🎜rrreee🎜Den spezifischen Code finden Sie in der Datei index.js
im Ordner echartMapTest
🎜Codeübersicht🎜🎜Beteiligt Die Datei lautet wie folgt (Einzelheiten finden Sie unter code
): 🎜|-- public
|-- data
|-- 4401.json
|-- mapdata.json
|-- images
|-- map-ic.png
|-- src
|-- api
|-- map.js // 获取地图geojson数据、地图弹窗接口模拟数据
|-- components
|-- chart
|-- index.vue // 图表单文件组件,供界面调用
|-- index.js // 实现自动化导入options里的图表option
|-- options // 存放各种图表的option
|-- map // 地图option
|-- index.js
|-- views
|-- echartMapTest // 实例所在
|-- index.vue
|-- index.scss
|-- index.js
|-- utils
|---utils.js
|-- main.js // 全局引入echarts图表
Nach dem Login kopierenNach dem Login kopieren代码
按代码总览
的目录去代码里找着看就行了。
https://github.com/liyoro/vue-skill
总结
以上,就是对echarts
地图模块的封装,还有自定义弹窗的实现。使用和复用都比较方便了。
最近才发现 www.makeapie.com 停服了,挺好用的东西来的,感谢这么多年的奉献。
有需求的可转移到 PPChart,算是一个替代品了
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Methode zur eleganten Kapselung der Echarts-Karte im Vue2-Projekt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!