Vue使用jsmind實現(xiàn)生成腦圖的示例代碼
項目部分參數(shù):
vue:2.6.10
node:16.20.0
1、使用命令行安裝jsmind
npm i jsmind -S
2、在文件中引入jsmind,并編寫渲染jsmind的代碼
<template>
<!-- jsmind容器 -->
<div
id="jsmindContainer"
ref="jsmindContainer"
></div>
</template>
<script>
// 引入jsmind方法和樣式
import "jsmind/style/jsmind.css";
import jsMind from "jsmind";
// 引入獲取數(shù)據(jù)的接口
import { getProjectMind } from "@/api/projectManagement";
export default {
data() {
return {
treeData: {},
jsmind: ""
};
},
created() {
this.initData();
},
beforeDestroy() {
if (this.jsmind) {
this.jsmind.destroy();
}
},
methods: {
initData() {
let projectId = this.$route.query.projectId;
getProjectMind(projectId)
.then(res => {
if (res.code === 200) {
this.treeData = res.data;
const options = {
container: "jsmindContainer", // 必選,容器ID
editable: false, // 可選,是否啟用編輯
theme: "asphalt", // 可選,主題
shortcut: {
enable: true // 禁用快捷鍵
},
layout: {
hspace: 50, // 節(jié)點之間的水平間距
vspace: 20, // 節(jié)點之間的垂直間距
pspace: 13 // 節(jié)點與連接線之間的水平間距(用于容納節(jié)點收縮/展開控制器)
},
mode: "full" // 顯示模式,子節(jié)點只分布在根節(jié)點右側(cè)
};
// 初始化jsMind對象
this.jsmind = new jsMind(options);
// 讓jsmind對象顯示具體的腦圖數(shù)據(jù)
this.jsmind.show({
meta: {
name: "jsMind",
author: "",
version: "0.1"
},
format: "node_tree",// 數(shù)據(jù)格式官方文檔有介紹
data: this.treeData
});
}
})
.catch(err => {});
}
}
};
</script>
重啟項目,報錯unexpected token...,我還以為是引入jsmind的方法不對,后來我直接引入jsmind/es6/jsmind文件還是不行,也沒有搜索到任何解決辦法,我就嘗試安裝低版本的jsmind,安裝了0.5.0版本的jsmind,重啟項目OK了。
3、點擊腦圖部分節(jié)點,展示詳情彈窗
在準備腦圖數(shù)據(jù)的時候,我們將部分節(jié)點數(shù)據(jù)設(shè)計成了這樣:

topic里面是a標(biāo)簽,當(dāng)點擊a標(biāo)簽的時候,會觸發(fā)showTask事件,展示詳情彈窗。
但是在腦圖渲染出來之后,才發(fā)現(xiàn)在method里面注冊的showTask事件,是觸發(fā)不了的。后面嘗試著將topic數(shù)據(jù)里面的onclick換為@click,看vue能否正常將其渲染為a標(biāo)簽的點擊事件,結(jié)果還是不行,估計是因為jsmind使用了canvas,vue沒有將canvas里面的元素變?yōu)槟0鍢?biāo)簽。
怎么解決呢?我使用了window來幫忙注冊事件,這樣全局就有了showTask事件,點擊a標(biāo)簽?zāi)軌蛘S|發(fā)了。
// 因為window里面的this不是指向當(dāng)前組件,所以需要提前注冊使用
window.$$this = this;
window.showTask = function(id) {
// 展示詳情彈窗
window.$$this.detailShow = true;
// 詳情彈窗獲取數(shù)據(jù)
window.$$this.$nextTick(() => {
window.$$this.$refs.TaskDetail.init(id);
});
};
最后要注意在組件的beforeDestroy生命周期中,清除數(shù)據(jù):
beforeDestroy() {
if (this.jsmind) {
this.jsmind.destroy();
window.showTask = undefined;
window.$$this = undefined;
}
}
到此這篇關(guān)于Vue使用jsmind實現(xiàn)生成腦圖的示例代碼的文章就介紹到這了,更多相關(guān)Vue jsmind生成腦圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue3.0基于views批量實現(xiàn)動態(tài)路由的方法(示例代碼)
以前vue項目中也有很多實現(xiàn)動態(tài)路由的方法,比如有一些項目涉及權(quán)限的可能會使用api請求路由數(shù)據(jù)在來createRouter,或者本地構(gòu)建使用routes.push來動態(tài)構(gòu)建路由, 今天介紹一種新的方式來基于某個文件夾批量構(gòu)建動態(tài)路由的方法,感興趣的朋友一起看看吧2024-12-12
vue中el-tab如何點擊不同標(biāo)簽觸發(fā)不同函數(shù)的實現(xiàn)
el-tab本身的功能是點擊之后切換不同頁,本文主要介紹了vue中el-tab如何點擊不同標(biāo)簽觸發(fā)不同函數(shù)的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2024-03-03
vue 輸入框輸入任意內(nèi)容返回數(shù)字的實現(xiàn)
本文主要介紹了vue 輸入框輸入任意內(nèi)容返回數(shù)字的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-03-03

