当前位置:首页 > VUE

vue实现jsmind

2026-01-13 07:04:01VUE

使用 Vue 实现 JsMind

JsMind 是一个基于 JavaScript 的思维导图库,可以通过 Vue 集成实现动态思维导图功能。以下是实现步骤和代码示例。

安装 JsMind

通过 npm 安装 JsMind 库:

npm install jsmind

或者通过 CDN 引入:

<script src="https://unpkg.com/jsmind@0.4.6/js/jsmind.js"></script>
<link href="https://unpkg.com/jsmind@0.4.6/style/jsmind.css" rel="stylesheet">

创建 Vue 组件

创建一个 Vue 组件来承载 JsMind 的渲染和交互逻辑。以下是完整示例代码:

<template>
  <div>
    <div ref="jsmindContainer" class="jsmind-container"></div>
    <button @click="addNode">添加节点</button>
  </div>
</template>

<script>
import jsMind from 'jsmind';

export default {
  name: 'JsMindDemo',
  data() {
    return {
      jm: null,
      mindData: {
        meta: {
          name: 'jsmind-example',
          author: 'author',
          version: '0.2',
        },
        format: 'node_array',
        data: [
          { id: 'root', topic: '根节点', isroot: true },
          { id: 'sub1', topic: '子节点1', parentid: 'root' },
          { id: 'sub2', topic: '子节点2', parentid: 'root' },
        ],
      },
    };
  },
  mounted() {
    this.initJsMind();
  },
  methods: {
    initJsMind() {
      const options = {
        container: this.$refs.jsmindContainer,
        theme: 'primary',
        editable: true,
      };
      this.jm = new jsMind(options);
      this.jm.show(this.mindData);
    },
    addNode() {
      const selectedNode = this.jm.get_selected_node();
      if (selectedNode) {
        const nodeId = 'node_' + Date.now();
        this.jm.add_node(selectedNode.id, nodeId, '新节点');
      }
    },
  },
};
</script>

<style>
.jsmind-container {
  width: 100%;
  height: 500px;
  border: 1px solid #eee;
}
</style>

关键功能实现

初始化思维导图mounted 钩子中调用 initJsMind 方法,传入容器 DOM 和配置选项。show 方法加载初始数据。

动态添加节点 通过 addNode 方法获取当前选中节点并添加子节点。jm.add_node 方法接收父节点 ID、新节点 ID 和显示文本。

数据交互 JsMind 提供 get_data 方法获取当前导图数据,可用于保存或提交到后端:

const mindData = this.jm.get_data();
console.log(mindData);

自定义样式和主题

通过修改 options.theme 切换内置主题(如 primaryinfo),或自定义 CSS:

.jsmind-container jsmind {
  background-color: #f5f5f5;
}

事件处理

JsMind 支持多种事件监听,例如节点选中事件:

this.jm.add_event_listener((event, data) => {
  if (event === 'select_node') {
    console.log('选中节点:', data.node.topic);
  }
});

注意事项

  1. 容器需设置明确宽高,否则可能导致渲染异常
  2. 动态修改数据后需调用 jm.show() 重新渲染
  3. 复杂操作建议结合 Vuex 管理状态

通过以上方法,可以在 Vue 项目中快速集成 JsMind 实现交互式思维导图功能。

vue实现jsmind

标签: vuejsmind
分享给朋友:

相关文章

vue实现前端分离

vue实现前端分离

Vue 实现前后端分离 前后端分离是一种架构模式,前端负责页面渲染和交互逻辑,后端提供数据接口。Vue.js 作为前端框架,非常适合实现前后端分离的开发模式。 核心实现步骤 创建 Vue 项目 使用…

vue实现组件循环

vue实现组件循环

Vue 组件循环的实现方法 在 Vue 中实现组件循环通常使用 v-for 指令,可以循环渲染数组或对象的数据到组件上。 基本数组循环 通过 v-for 指令遍历数组,渲染多个相同结构的组件。…

vue实现裁剪头像

vue实现裁剪头像

Vue 实现头像裁剪功能 实现头像裁剪功能通常需要结合第三方库如 cropperjs 或 vue-cropper。以下是两种常见实现方式: 使用 vue-cropper 库 安装依赖: np…

vue实现菜单调用

vue实现菜单调用

Vue 实现动态菜单的常见方法 基于路由配置生成菜单 Vue Router 的路由配置可以天然转化为菜单结构,适合权限与路由绑定的系统: // router/index.js const rout…

vue单页面实现登录

vue单页面实现登录

实现登录功能的基本流程 在Vue单页面应用中实现登录功能,通常需要以下几个关键步骤: 创建登录表单组件 使用Vue的模板语法创建包含用户名和密码输入框的表单,并绑定数据到组件的data属性。 &l…

vue弹幕实现不重叠

vue弹幕实现不重叠

实现 Vue 弹幕不重叠的方法 CSS 定位与动画控制 通过绝对定位和动态计算弹幕轨道高度,确保弹幕在不同轨道上运行。每条弹幕占据固定高度的轨道,避免重叠。 // 弹幕轨道高度计算 const t…