最近在找一个好用的angular思维导图插件,找来找去,找到了jsMind,当然,有的同学还搜索到了mind-map这个插件,这个也是基于jsMind封装的。作为一个纯JavaScript插件,怎样在angular中使用呢?

1,jsMind简介

以下摘抄自jsMind github

jsMind 是一个显示/编辑思维导图的纯 javascript 类库,其基于 html5 canvas (和 svg) 进行设计。jsMind 以 BSD 协议开源,在此基础上你可以在你的项目上任意使用。你可以在此浏览适用于 jsMind 的 BSD 许可协议(中英文版本)。

2,导入jsMind

目前,jsMind已发布npm库,可直接使用

npm i jsmind

3,接下来按照引入第三方js的方式,引入jsMind的js文件

首先,修改根目录下的angular.json文件:

在styles中和scripts中引入jsMind的样式和js文件,如果想要拖拽和截屏功能的话,jsmind.draggable-node.js和jsmind.screenshot.js都是需要引入的。

4,在组件中导入

import 'jsmind/js/jsmind.js';
import 'jsmind/js/jsmind.draggable-node';

别忘了定义jsMind变量

declare var jsMind:any;

定义options

const options = {container: 'jsmind_container',theme: 'greensea',editable: true,view: {draggable: true,},
}

定义变量mindMap

 mindMap:any;

然后在ngOnInit方法中直接调用show方法

 this.mindMap = jsMind.show(options,this.mind);

在html中,定义一个div,注意id要和options中的container保持一致

<div id="jsmind_container" ></div> 

别忘了给div设置以下宽高,要不然显示不出来

#jsmind_container {float: left;width: 100%;height: 800px;
}

现在就能看到效果了

5,监听jsMind中的拖拽,点击事件

  ngAfterViewInit(): void {let jsMindDOM = jsMind.util.dom;jsMindDOM.add_event(document,'mousedown',(e:any)=>{let position:Position = (this.jsmindUtilService.dragstart(e,options.editable)) as Position;if(position){this.mouseDownFlag = true;}console.log(position);})jsMindDOM.add_event(document,'mousemove',(e:any)=>{// console.log(e)})jsMindDOM.add_event(document,'mouseup',(e:any)=>{if(this.mouseDownFlag){console.log(this.mindMap.get_data())this.mouseDownFlag = false;}})}
import { Injectable } from '@angular/core';@Injectable({providedIn: 'root'
})
export class JsmingUtilService {constructor() { }dragstart (e:any,editable:boolean) {if (!editable) { return; }var el = e.target;if (el.tagName.toLowerCase() != 'jmnode') { return; }console.log(e)let offset_x = (e.clientX || e.touches[0].clientX)  - el.offsetLeft;let offset_y = (e.clientY || e.touches[0].clientY) - el.offsetTop;let client_hw = Math.floor(el.clientWidth / 2);let client_hh = Math.floor(el.clientHeight / 2);return {x:offset_x,y:offset_y,hw:client_hw,hh:client_hh}}
}

angular 使用jsMind相关推荐

  1. Angular No name was provided for external module 'XXX' in output.globals 错误

    Angular 7 开发自定义库时,引用ngZorroAntd,build过程中出现 No name was provided for external module 'ng-zorro-antd' ...

  2. angular.isUndefined()

    <!DOCTYPE html> <html><head><meta charset="UTF-8"><title>ang ...

  3. 五:Angular 数据绑定 (Data Binding)

    通常来说,数据绑定要么是从页面流向组件中的数据,要么是从组件中的数据流向页面.下面我们来介绍在Angular 2中数据绑定的几种不同方式.  1. 使用{{}}将组件中的数据显示在html页面上  实 ...

  4. angular初步认识一

    最近比较流行MVC前端框架开发,最近研究了一个框架AngularJS框架 不说那么多,先上例子,我是个代码控 <!DOCTYPE html> <html lang="en& ...

  5. 【讲人话】Angular如何通过@ViewChildren获取实时渲染的动态DOM节点元素(@ViewChild只能获取静态的固定DOM节点)

    故事背景:有一天,强哥整了个动态渲染的列表代码如下 app.component.html <div><button (click)="add()">添加一行 ...

  6. Angular的ChangeDetectorRef.detectChanges()实现angularJS的$apply()方法,强制刷新数据渲染

    在Javascript代码里,都是按照一定顺序来执行的,当轮到一个代码片段执行的时候,浏览器就只会去执行当前的片段,不会做任何其他的事情.所以有时候一些做得不是很好的网页,当点击了某个东西之后会卡住, ...

  7. Angular多个页面引入同一个组件报错The Component ‘MyComponentComponent‘ is declared by more than one NgModule怎么办?

    有一天,我写了一个自信满满的自定义组件myComponent,在多个页面import使用了,结果控制台给我来这个 我特么裤子都脱了,你给我来这个提示是几个意思 仔细一看 The Component ' ...

  8. 【硬核解说】一口气讲明白Angular的5种路由守卫RouteGuard是嘛玩意儿

    Angular的常用路由守卫有5种,按照执行顺序: ① CanLoad:进入到当前路由的时候触发(若用户没有权限访问,相应的模块并不会被加载.这里是指对应组件的代码). ↓ ② CanAcitivat ...

  9. 浅谈Angular如何自定义创建指令@Directive

    ​知识普及 Angular 指令根据其创建形式分为内置指令和自定义指令,指令按照类型分: 模板指令--组件就是模板指令(只能自定义) 属性型指令 -- 更改元素.组件或其他指令的外观或行为的指令(有内 ...

  10. 【进阶玩法】Angular用emit()实现类似Vue.js的v-model双向绑定[(ngModel)]功能

    app.component.html <app-sizer [(ngModel)]="fontSizePx"></app-sizer> <p [sty ...

最新文章

  1. 简明python教程在线-简明python教程
  2. 【Groovy】集合遍历 ( 调用集合的 every 方法判定集合中的所有元素是否符合闭包规则 | =~ 运算符等价于 contains 函数 | 代码示例 )
  3. 线索二叉树怎么画_固原超级记忆技巧课程怎么学_蒙正智升教育
  4. HANA live report - metadata retrieve - where I can find it in HANA studio
  5. 如何正确选择合适的贷款机构,避免征信花掉?
  6. 数据结构相关代码-简介
  7. 清结算内部勾兑业务一个比较有意思的问题整理
  8. 适合节日促销的海报设计PSD分层模板|夜晚烟花,浓浓喜庆氛围
  9. linux内核镜像的分层,Docker镜像分层的原理详解
  10. JAXB处理java对象与xml格式之间的转换
  11. 347.前K个高频元素(力扣leetcode) 博主可答疑该问题
  12. Matlab之函数绘图函数ezplot
  13. 波士顿大学 计算机专业,波士顿大学计算机工程类专业排名还是该小心的看
  14. 【JavaScript】 一万字 JavaScript 笔记(详细讲解 + 代码演示 + 图解)
  15. 【标签画像系列】标签体系建设方法论
  16. chromecast 协议_如何删除Chromecast的网络范围内的Android通知
  17. 白领沉迷EXCEL式生存
  18. unzip和zip指令的使用方法
  19. binlog_do_db 与 binlog_ignore_db
  20. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java手游账号交易系统u2741

热门文章

  1. 在网上看到SpiceWorks是一个免费但很强大的HELPDESK系统
  2. appfuse mysql_学习 AppFuse
  3. win7 计算机定时关机脚本,Win7制作定时关机bat脚本|Win7定时关机程序脚本
  4. android铃声总结
  5. 公路路桥企业工程管理软件
  6. MySql设置远程连接
  7. jsp中java代码的输出,Java控制台输入,输出!-JSP教程,Java技巧及代码
  8. 基于JavaWeb的会议室预约管理系统
  9. 大华中心管理服务器,大华监控中心联网解决方案
  10. aaa logo汉子字体_AAA Logo –标志设计软件