vue中使用echarts以及簡(jiǎn)單關(guān)系圖的點(diǎn)擊事件方式
1.安裝
在Vue項(xiàng)目中打開(kāi)終端執(zhí)行命令:
npm install echarts --save
下載后在package.json文件中可以看到下載的Echarts版本:

2.導(dǎo)入
在需要使用Echarts圖表的頁(yè)面中導(dǎo)入:
import * as echarts from "echarts";
如果多個(gè)地方使用的話可以通過(guò)全局引入:
import * as echarts from 'echarts' // 掛載到Vue實(shí)例 Vue.prototype.$echarts = echarts
3.繪制靜態(tài)圖表
在需要用到echarts的地方設(shè)置一個(gè)有寬高的div盒子
<div>
<div
ref="chart"
style="width:800px;height:600px;margin: auto">
</div>
</div>
定義echarts關(guān)系圖的數(shù)據(jù)
data() {
return {
data: [
{
name: "Node 1",
x: 300,
y: 300,
},
{
name: "Node 2",
x: 800,
y: 300,
},
{
name: "Node 3",
x: 550,
y: 100,
},
{
name: "Node 4",
x: 550,
y: 500,
},
],
links: [
{
source: 0,
target: 1,
symbolSize: [5, 20],
label: {
show: true,
},
lineStyle: {
width: 5,
curveness: 0.2,
},
},
{
source: "Node 2",
target: "Node 1",
label: {
show: true,
},
lineStyle: {
curveness: 0.2,
},
},
{
source: "Node 1",
target: "Node 3",
},
{
source: "Node 2",
target: "Node 3",
},
{
source: "Node 2",
target: "Node 4",
},
{
source: "Node 1",
target: "Node 4",
},
],
num: 0, // 點(diǎn)擊次數(shù)
};
},
在methods中定義實(shí)例化echarts對(duì)象的方法,在mounted生命周期中調(diào)用(確保dom元素已經(jīng)掛載到頁(yè)面當(dāng)中)
mounted() {
this.getEchartData();
},
methods: {
getEchartData() {
const chart = this.$refs.chart;
// 初始化echarts
this.mychart = echarts.init(chart);
let that = this;
// option就是需要引進(jìn)echarts關(guān)系圖中的代碼
let option = {
title: {
text: "Basic Graph",
},
tooltip: {},
animationDurationUpdate: 1500,
animationEasingUpdate: "quinticInOut",
series: [
{
type: "graph",
layout: "none",
symbolSize: 50,
roam: true,
label: {
show: true,
},
edgeSymbol: ["circle", "arrow"],
edgeSymbolSize: [4, 10],
edgeLabel: {
fontSize: 20,
},
lineStyle: {
opacity: 0.9,
width: 2,
curveness: 0,
},
// data: []
data: that.data,
// links: [],
links: that.links,
},
],
};
// option數(shù)據(jù)放入圖表中
this.mychart.setOption(option);
},
},
啟動(dòng)項(xiàng)目,在頁(yè)面中看到如下效果:

4.關(guān)系圖節(jié)點(diǎn)點(diǎn)擊事件
上面只是展示了靜態(tài)的關(guān)系圖,如節(jié)點(diǎn)數(shù)據(jù)太多,各節(jié)點(diǎn)關(guān)系復(fù)雜,就可只展示主要數(shù)據(jù),其他可通過(guò)點(diǎn)擊節(jié)點(diǎn)查看各節(jié)點(diǎn)關(guān)系
需求:新建一個(gè)Node5,Node5和Node2有關(guān)系,點(diǎn)擊Node2展示Node5節(jié)點(diǎn)
在上面原本的getEchartData()方法中,添加關(guān)系圖的節(jié)點(diǎn)點(diǎn)擊事件
通過(guò)事件參數(shù)param中的dataType屬性值確認(rèn)點(diǎn)擊的對(duì)象是關(guān)系圖節(jié)點(diǎn)還是節(jié)點(diǎn)之間的邊緣,值為node時(shí)點(diǎn)擊的是節(jié)點(diǎn),值為edge時(shí)點(diǎn)擊的是邊緣
通過(guò)param中的dataIndex值確定點(diǎn)擊的節(jié)點(diǎn)元素
完整代碼如下:
getEchartData() {
const chart = this.$refs.chart;
// 初始化echarts
this.mychart = echarts.init(chart);
let that = this;
// option就是需要引進(jìn)echarts關(guān)系圖中的代碼
let option = {
title: {
text: "Basic Graph",
},
tooltip: {},
animationDurationUpdate: 1500,
animationEasingUpdate: "quinticInOut",
series: [
{
type: "graph",
layout: "none",
symbolSize: 50,
roam: true,
label: {
show: true,
},
edgeSymbol: ["circle", "arrow"],
edgeSymbolSize: [4, 10],
edgeLabel: {
fontSize: 20,
},
lineStyle: {
opacity: 0.9,
width: 2,
curveness: 0,
},
// data: []
data: that.data,
// links: [],
links: that.links,
},
],
};
// echarts圖表的點(diǎn)擊事件,可通過(guò)param參數(shù)確認(rèn)點(diǎn)擊的對(duì)象
that.mychart.on("click", function (param) {
if (param.dataType == "node") {
// Node2的 param.dataIndex 值為1
if (param.dataIndex == 1) {
// 判斷點(diǎn)擊的次數(shù),單數(shù)顯示Node5數(shù)據(jù),雙數(shù)隱藏
that.num++;
if (that.num % 2 == 1) {
that.data.push({
name: "Node 5",
x: 900,
y: 300,
});
that.links.push({
source: "Node 2",
target: "Node 5",
});
that.mychart.setOption(option);
} else {
that.data.pop();
that.links.pop();
that.mychart.setOption(option);
}
}
} else {
console.log("點(diǎn)擊了邊", param);
}
});
// option數(shù)據(jù)放入圖表中
this.mychart.setOption(option);
},
最終效果如下:

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue+elementui 實(shí)現(xiàn)新增和修改共用一個(gè)彈框的完整代碼
Element-Ul是餓了么前端團(tuán)隊(duì)推出的一款基于Vue.js 2.0 的桌面端UI框架,手機(jī)端有對(duì)應(yīng)框架是Mint UI ,今天給大家普及vue+elementui 實(shí)現(xiàn)新增和修改共用一個(gè)彈框的完整代碼,一起看看吧2021-06-06
關(guān)于vue2強(qiáng)制刷新,解決頁(yè)面不會(huì)重新渲染的問(wèn)題
今天小編就為大家分享一篇關(guān)于vue2強(qiáng)制刷新,解決頁(yè)面不會(huì)重新渲染的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10
vue如何監(jiān)聽(tīng)某個(gè)元素的大小變化
這篇文章主要介紹了vue如何監(jiān)聽(tīng)某個(gè)元素的大小變化問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10
Vue使用localStorage存儲(chǔ)數(shù)據(jù)的方法
這篇文章主要為大家詳細(xì)介紹了Vue使用localStorage存儲(chǔ)數(shù)據(jù)的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05
vue3 可拖動(dòng)的左右面板分割組件實(shí)現(xiàn)
最近在使用vue的時(shí)候,遇到一個(gè)需求,實(shí)現(xiàn)左右div可通過(guò)中間部分拖拽調(diào)整寬度,本文就整理一下,分享給大家,有興趣的可以學(xué)習(xí)2021-06-06
vue3中echarts圖表在頁(yè)面刷新后無(wú)法自適應(yīng)改變大小的解決過(guò)程
優(yōu)化ECharts圖表開(kāi)發(fā)需獨(dú)立變量、創(chuàng)建顯示方法,并通過(guò)添加和移除窗口大小監(jiān)聽(tīng)實(shí)現(xiàn)響應(yīng)式刷新,確保性能與資源管理2025-09-09

