当前位置:首页 > 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 支持多种事件监听,例如节点选中事件:

vue实现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 实现交互式思维导图功能。

标签: vuejsmind
分享给朋友:

相关文章

vue路由实现

vue路由实现

Vue 路由实现 Vue Router 是 Vue.js 的官方路由管理器,用于构建单页面应用(SPA)。以下是 Vue Router 的基本实现步骤和核心功能。 安装 Vue Router 通过…

vue实现tap

vue实现tap

Vue 实现 Tap 事件 在移动端开发中,Tap 事件比 Click 事件更常用,因为 Click 事件有 300ms 延迟。以下是几种在 Vue 中实现 Tap 事件的方法。 使用第三方库 安装…

vue远离实现

vue远离实现

Vue 原理实现 Vue.js 的核心原理包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是其关键实现原理的详细解析。 响应式系统 Vue 的响应式系统基于 Object.definePro…

vue实现登录退出

vue实现登录退出

实现登录功能 在Vue中实现登录功能通常需要结合表单验证、API请求和状态管理。以下是一个基础实现示例: 安装必要依赖(如axios和vuex): npm install axios vuex 创…

vue实现左右菜单联动实现

vue实现左右菜单联动实现

Vue 实现左右菜单联动 使用事件总线通信 在 Vue 中可以通过事件总线实现左右菜单的通信。创建一个中央事件总线实例,让左右菜单通过事件监听和触发实现联动。 // eventBus.js impo…

vue实现树目录

vue实现树目录

Vue 实现树形目录 在 Vue 中实现树形目录可以通过递归组件或第三方库(如 element-ui 的 el-tree)完成。以下是两种常见实现方式: 递归组件实现 递归组件适合自定义程度高的树形…