Vue和relation-graph庫打造高質(zhì)量的關(guān)系圖應(yīng)用程序
產(chǎn)品提需求啦,有一個需求就是實現(xiàn)一個功能:展現(xiàn)各個文件之間的調(diào)用關(guān)系,通過關(guān)系圖的形式進(jìn)行展示出來。之前考慮使用antv x6實現(xiàn)此功能,但是考慮到只是展示的功能,也不需要進(jìn)行交互,所以放棄使用antv x6,選擇了更加簡單的relation-graph插件。
先來看一個示例項目:
<template>
<div>
<div style="height: calc(100vh - 50px)">
<RelationGraph
ref="seeksRelationGraph"
:options="graphOptions"
:on-node-click="onNodeClick"
:on-line-click="onLineClick"
/>
</div>
</div>
</template>
<script>
// relation-graph也支持在main.js文件中使用Vue.use(RelationGraph);這樣,你就不需要下面這一行代碼來引入了。
import RelationGraph from 'relation-graph'
export default {
name: 'Demo',
components: { RelationGraph },
data() {
return {
graphOptions: {
allowSwitchLineShape: true,
allowSwitchJunctionPoint: true,
defaultJunctionPoint: 'border'
// 這里可以參考"Graph 圖譜"中的參數(shù)進(jìn)行設(shè)置
}
}
},
mounted() {
this.showSeeksGraph()
},
methods: {
showSeeksGraph() {
const __graph_json_data = {
rootId: 'a',
nodes: [
{ id: 'a', text: 'A', borderColor: 'yellow' },
{ id: 'b', text: 'B', color: '#43a2f1', fontColor: 'yellow' },
{ id: 'c', text: 'C', nodeShape: 1, width: 80, height: 60 },
{ id: 'e', text: 'E', nodeShape: 0, width: 150, height: 150 }
],
lines: [
{ from: 'a', to: 'b', text: '關(guān)系1', color: '#43a2f1' },
{ from: 'a', to: 'c', text: '關(guān)系2' },
{ from: 'a', to: 'e', text: '關(guān)系3' },
{ from: 'b', to: 'e', color: '#67C23A' }
]
}
// 以上數(shù)據(jù)中的node和link可以參考"Node節(jié)點"和"Link關(guān)系"中的參數(shù)進(jìn)行配置
this.$refs.seeksRelationGraph.setJsonData(__graph_json_data, (seeksRGGraph) => {
// Called when the relation-graph is completed
})
},
onNodeClick(nodeObject, $event) {
console.log('onNodeClick:', nodeObject)
},
onLineClick(lineObject, $event) {
console.log('onLineClick:', lineObject)
}
}
}
</script>運行效果:

這里有一個需要注意的點是,如果你的vue版本低于2.6.12時,圖譜會顯示異常,圖譜加載不完全甚至網(wǎng)頁中出現(xiàn)undefined。這時我們只需要將我們的版本升級一下就可以。我選擇的是安裝版本為2.6.14,升級完vue版本之后,記得要 npm install 重新安裝一下依賴,不然會出現(xiàn) vue-template-compiler 和vue版本不匹配也不能成功運行項目的問題。

npm install vue@2.6.14
接下來進(jìn)入我們的正題,詳細(xì)介紹一下開發(fā)過程。
1.引入relation-graph
// 注意:relation-graph支持Vue2、Vue3、React, 但引入的包名稱都是【relation-graph】 npm install --save relation-graph
插件安裝完成之后,需要在我們開發(fā)的頁面中引入和注冊
import SeeksRelationGraph from 'relation-graph'
components: { SeeksRelationGraph },2.初始化設(shè)置
然后就是一些初始化的設(shè)置
<SeeksRelationGraph
ref="seeksRelationGraph"
:options="graphOptions"
:on-node-click="nodeClick"
/>其中options就是圖譜配置,一個對象,里面包含了具體的選項:如果你的需求是單純的展示關(guān)系圖,不需要進(jìn)行節(jié)點拖動操作的,可以將拖動禁掉
// 禁用拖拽
disableDragNode: true,其中l(wèi)ayouts布局設(shè)置,
layoutName:布局方式(tree樹狀布局/center中心布局/force自動布局)layoutClassName: 當(dāng)使用這個布局時,會將此樣式添加到圖譜上,這里就是設(shè)置我們自定義的樣式min_per_width:節(jié)點距離限制:節(jié)點之間橫向距離最小值max_per_width:節(jié)點距離限制:節(jié)點之間橫向距離最大值min_per_height:節(jié)點距離限制:節(jié)點之間縱向距離最小值max_per_height:節(jié)點距離限制:節(jié)點之間縱向距離最大值節(jié)點之間的最小距離建議不要太小了,如果節(jié)點內(nèi)容比較多導(dǎo)致節(jié)點比較大,很容易導(dǎo)致節(jié)點之間重疊。
layouts: [
{
label: '中心',
layoutName: 'tree',
layoutClassName: 'seeks-layout-center',
defaultNodeShape: 0,
from: 'left',
// 通過這4個屬性來調(diào)整 tree-層級距離&節(jié)點距離
min_per_width: '300',
max_per_width: '300',
min_per_height: '40',
max_per_height: '60',
},
],除此之外我們還可以為我們的圖譜添加工具欄,對應(yīng)的圖譜配置分別為:
allowShowMiniToolBar:是否顯示工具欄allowShowRefreshButton:是否在工具欄中顯示【刷新】按鈕allowShowDownloadButton: 是否在工具欄中顯示【下載圖片】按鈕allowSwitchLineShape:是否在工具欄中顯示切換線條形狀的按鈕allowSwitchJunctionPoint:是否在工具欄中顯示切換連接點位置的按鈕

上面列舉的都是一些常用的配置和布局設(shè)置,除此之外官方還提供了很多其他的配置,詳細(xì)參考官方文檔
3、數(shù)據(jù)格式
通過設(shè)置一個json對象的nodes、lines、rootId來定義圖譜中要展示的節(jié)點、關(guān)系線、根節(jié)點
const __graph_json_data = {
rootId: 'a',
nodes: [
{ id: 'a', text: 'A', borderColor: 'yellow' },
{ id: 'b', text: 'B', color: '#43a2f1', fontColor: 'yellow' },
{ id: 'c', text: 'C', nodeShape: 1, width: 80, height: 60 },
{ id: 'e', text: 'E', nodeShape: 0, width: 150, height: 150 }
],
lines: [
{ from: 'a', to: 'b', text: '關(guān)系1', color: '#43a2f1' },
{ from: 'a', to: 'c', text: '關(guān)系2' },
{ from: 'a', to: 'e', text: '關(guān)系3' },
{ from: 'b', to: 'e', color: '#67C23A' }
]
}nodes定義的是節(jié)點數(shù)據(jù),lines定義的是關(guān)系線。
node節(jié)點
我們可以定義普通的節(jié)點,不需要進(jìn)行樣式的設(shè)置和定義,官方已經(jīng)為我們定義好了。
{
id: 'N16',
color: '#4ea2f0',
text: '123311312'
},不過我們可以設(shè)置節(jié)點id,節(jié)點名稱text,節(jié)點背景顏色color,這里與css有所不同,字體顏色是fontColor,節(jié)點形狀nodeShape(0圓形,1矩形),除了使用官方自定義的節(jié)點之外,我們還可以自定義節(jié)點,是通過html的形式進(jìn)行定義。
{
id: 'N15',
text: this.A.path,
color: '#4ea2f0',
width: 100,
height: 100,
html: `
<div class='TIME' @click='nodeClick'>
<div>名稱:${this.A.name}</div>
<div>掘金:${this.A.path}</div>
<div>QQ:${this.A.qq}</div>
</div>
`
},其中A是在data中定義的一個對象
A: {
name: '靜Yu',
path: 'https://juejin.cn/user/2225839800062215',
qq: '789789798',
},lines關(guān)系線
from和to對應(yīng)的都是節(jié)點的id,除此之外還可以在連接線上添加文字 text ,線條粗細(xì) lineWidth ,線條顏色 color 等等
links: [
{ from: 'N1', to: 'N15' },
{ from: 'N15', to: 'N16' },
{ from: 'N15', to: 'N17' },
{ from: 'N15', to: 'N18' },
{ from: 'N15', to: 'N19' },
{ from: 'N18', to: 'N20' },
],4.Events事件
官方為我們提供了五種觸發(fā)事件
on-node-click點擊節(jié)點事件on-node-expand展開節(jié)點事件on-node-collapse收縮節(jié)點事件on-line-click點擊線條事件on-image-download當(dāng)點擊下載圖片按鈕時觸發(fā)
較為常用的就是點擊節(jié)點和線條觸發(fā)的事件
<SeeksRelationGraph
ref="seeksRelationGraph"
:options="graphOptions"
:on-node-click="nodeClick"
/>
nodeClick(nodeObject) {
console.log(nodeObject)
}參數(shù)會返回節(jié)點的各種信息供我們使用

5.小結(jié)
在這篇文章中,我們深入探討了如何使用Vue和relation-graph高效打造關(guān)系圖。我們詳細(xì)介紹了數(shù)據(jù)準(zhǔn)備、關(guān)系映射、點擊事件等關(guān)鍵步驟。通過這些技巧和解決方案,我們可以更好地利用Vue和relation-graph庫來創(chuàng)建直觀且易于維護(hù)的關(guān)系圖??傊琕ue與relation-graph的結(jié)合為我們提供了一種強大且靈活的方式,以高效地構(gòu)建各種復(fù)雜的關(guān)系圖。通過掌握這些秘訣,我們可以更好地利用Vue和relation-graph庫,輕松打造出高質(zhì)量的關(guān)系圖應(yīng)用程序,從而更好地滿足各種需求。
到此這篇關(guān)于Vue和relation-graph庫打造高質(zhì)量的關(guān)系圖應(yīng)用程序的文章就介紹到這了,更多相關(guān)Vue和relation-graph庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue路由權(quán)限和按鈕權(quán)限的實現(xiàn)示例
本文主要介紹了vue路由權(quán)限和按鈕權(quán)限的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04
關(guān)于Vue3中defineProps用法圖文詳解
在vue3中組件傳參有很多種方式,和v2大差不差,但是有的地方還是有很多的區(qū)別,下面這篇文章主要給大家介紹了關(guān)于Vue3中defineProps用法的相關(guān)資料,需要的朋友可以參考下2022-11-11

