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)系圖??傊?,Vue與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