Vue — jTopo
近期在Vue项目中使用jTopo来制作集群节点拓扑图,官网http://www.jtopo.com/
使用vue-cli搭建的模块化开发项目,使用第三方库最好的方式就是通过npm install xxx
安装,然后在项目
里import
xxx
来使用;但是在JTopo
官网上并没有发现有该库的npm
包,但是无论是什么项目,最终通过打包后
跑在浏览器上的肯定是一个html
文件,在Vue
中就是根目录下的index.html
,在该文件中会将webpack
打包后的
build.js
文件通过<script>
标签方式引入。同理可以认为jtopo.js
就是webpack
打包输出的文件,将其手动在
index.html
文件中通过<script>
标签方式引入即可 (万变不离其宗。。想想html引入jQuery)!!!
initTopo:function(servlist,portlist,servType,canvas) {var stage = new JTopo.Stage(canvas);var scene = new JTopo.Scene();scene.background = 'static/img/saturation.png';stage.add(scene);var cloudNode = new JTopo.Node('Root VirtualIP');cloudNode.setSize(40, 40);cloudNode.fillColor = '255,255,0';//黄cloudNode.setLocation(360,230); cloudNode.layout = {type: 'circle', radius: 150};scene.add(cloudNode);for(var i=0; i<servlist.length; i++){var node = new JTopo.CircleNode(servlist[i]);node.fillStyle = '200,255,0';node.fillColor = '0,255,255';//青node.radius = 15;node.setLocation(scene.width * Math.random(), scene.height * Math.random());node.layout = {type: 'circle', radius: 80};// var port=portlist[i]; //Hbuilder 此处(闭包前)必须要加分号 (function(index){node.click(function(event){// 渲染服务版本信息var servInfos=gobalVue.versionInfos;for(var j=0;j<servInfos.length;j++){if(servInfos[j].serverName==servlist[index]){gobalVue.$router.push({name: 'serviceDetail',params:{'servType': servType,'servPort':portlist[index],'servInfo':servInfos[j]}})}else{gobalVue.$router.push({name: 'serviceDetail',params:{'servType': servType,'servPort':portlist[index]}})}} });})(i)scene.add(node); var link = new JTopo.Link(cloudNode, node);scene.add(link);/** 此处 vue-resource与axios的区别在于 vue-resource进行了 同步设置(此处必须同步)* * */$.ajaxSettings.async = false;$.post('/nodeServController/findNodesByServPort',{'servType':servType,'servPort':portlist[i]}, function(result) {var list=result.data.content;if(list!=null && list.length>0){for(var j=0; j<list.length; j++){var vmNode = new JTopo.CircleNode(list[j].nodeName+"::"+list[j].nodeIp);vmNode.radius = 10;vmNode.fillStyle = '255,255,0';vmNode.setLocation(scene.width * Math.random(), scene.height * Math.random());if (list[j].connectState) {var info=list[j];info.lastUpdate=gobalVue.renderTime(info.lastUpdate)vmNode.fillColor = '0,255,0'; //绿vmNode.click(function(event){gobalVue.$router.push({name: 'ShowNode', params:{node: info}})});} else{vmNode.fillColor = '255,0,0';//红vmNode.click(function(event){alert('节点已断开')});}scene.add(vmNode);scene.add(new JTopo.Link(node, vmNode)); }}},"json");}JTopo.layout.layoutNode(scene, cloudNode, true);scene.addEventListener('mouseup', function(e){if(e.target && e.target.layout){JTopo.layout.layoutNode(scene, e.target, true); }});$.ajaxSettings.async = true;}
示意图:(只是测试,不要在意红配绿赛。。哦)
在此功能中总结一下问题:
1. 闭包
(function(index){node.click(function(event){// 渲染服务版本信息var servInfos=gobalVue.versionInfos;for(var j=0;j<servInfos.length;j++){if(servInfos[j].serverName==servlist[index]){gobalVue.$router.push({name: 'serviceDetail',params:{'servType': servType,'servPort':portlist[index],'servInfo':servInfos[j]}})}else{gobalVue.$router.push({name: 'serviceDetail',params:{'servType': servType,'servPort':portlist[index]}})}} });
})(i)
在为多个节点渲染点击事件时利用foreach循环,但无法将节点的点击事件进行动态渲染,只能将最后一次循环的数
据代入点击事件,此时利用到闭包:将函数内部和函数外部连接起来的桥梁 将外部参数 i 传入点击事件。
2. 此处 $post多组数据 为保证数据展示一致,使用vue-recourse 并设置同步:
// 先设置为同步,再改为异步$.ajaxSettings.async = false;$.post('/nodeServController/findNodesByServPort',{'servType':servType,'servPort':portlist[i]}, function(result) {// 请求处理},"json");$.ajaxSettings.async = true;
3. this 对象
正常情况下this对象指向全局Vue实例对象,但在node-click处和$post处 this却指向 jTopo实例 及 vue-recourse
$post 实例,所以须在全局进行重新赋值( this善变须格外注意!!!):
var gobalVue=this; // vue实例
4. 对于不同场景切换问题
要将舞台Stage设置多个Scene对象,统一渲染数据后,切换为某个场景即可设置某个Scene.visible=true;其他为
false实现。
var scene = new JTopo.Scene();
scene.visible=true; // 切换选中
scene.visible=false;
Vue — jTopo相关推荐
- Vue+JTopo(一)
1.下载js jtopo 更新下载 (不知道为什么网站被封禁了--在这提供下我现在用的 jtopo-1.4.4_trial-esm-min.js) 链接:https://pan.baidu.com/s ...
- vue、jtopo绘制鱼骨图
效果如下图所示: 一.文件目录结构: 二.绘制png的鱼头.鱼尾图片 fish_head.png: fish_tail.png: 三.下载js文件 jquery.jtopo请到官网 ...
- 区别vue的this和JTopo中的this
第一种方法,用=>函数 第二种方法,_this = this 来替换vue的this 转载于:https://www.cnblogs.com/liuruolin/p/7419007.html
- 手绘topo图组件 vue + element-ui + jtopo
系统不识别美元符号,emit和Message前需要加$符号 html部分 <div class="close-it" @click="closePage" ...
- jTopo入门 简单实现拓扑图
最近项目中需要绘制拓扑图,于是研究了下绘制拓扑图的组件,jtopo是一款比较简单易上手的开发工具包,分享给大家. jtopo特点 1.完全基于HTML5 Canvas开发,API平易近人.几乎简单到了 ...
- jtopo影响了input光标左右移动
背景: 在使用 JTopo绘制流程图 后, 页面上的 文本输入框(input)通过键盘左右键移动光标失效 原因: jtopo-0.4.8.js 中的m(b) 方法,对4个方向键 进行了屏蔽,放开屏蔽即 ...
- canvas java 上传截图_在Vue项目中使用html2canvas生成页面截图并上传
使用方法 项目中引入 npm install html2canvas html代码 //html代码 js代码 // 引入html2canvas import html2canvas from 'ht ...
- vue实现文件上传功能
代码如下所示: <!DOCTYPE html> <html lang="en"> <head><meta charset="UT ...
- win10 4步快速安装vue
1 安装nvm-windows 在这里下载安装nvm,目的是在同一台电脑中管理多个 Node 版本 建议采取默认安装路径安装 2 安装nodejs 以管理员模式打开命令行,然后输入 nvm list ...
- 前端Vue学习之路(五)插件的使用
vant插件使用 这里我们是用的语法是vue2.0 所以是 npm i vant -S 用法 1.按需引入的话 找到package.json文件 添加以下内容 plugins:[['import', ...
最新文章
- 详析数字图像中高斯模糊理论及实现
- EBS ORACLE使用API批量取消销售订单
- mysql explain字段含义_史上最全的explain常见结果含义分析,值得收藏
- Java 设计模式之普通代理
- javascript学习笔记(十九) 节点的操作
- 西部动力成功中标围场县政府网站群建设项目
- 不到 20 人的互联网公司该去吗?
- VS2015下载地址和安装教程(图解)
- 罪恶都市联机器无法显示服务器,《GTA:罪恶都市》多人联机!你的童年又回来了,梦想成真了!...
- 【WPA TSP】基于matlab狼群算法求解旅行商问题【含Matlab源码 211期】
- 谷歌浏览器无法安装扩展程序 – chrome无法添加crx插件的解决方法
- 基于讯飞语音引擎3.0.apk的Android原生TTS
- 关键信息基础设施确定指南_干货分享 | 关键信息基础设施运营单位如何做好业务安全测试...
- Aspose 只更新页码和 更新域 UpdatePageNumbers
- 阿里云服务器带宽下载上传速度表(1Mbps是128KB/s)
- 2021朔城区一中高考成绩查询,青春有志逐梦远行—朔城区一中2021届高三毕业典礼暨高考壮行大会...
- vb.net如何查询电脑麦克风收到声音_远程会议痛点多?看Poly Studio X30如何破局
- Allegro pcb转AD
- 【电气专业知识问答】问:厂用高压开关柜必须具备的基本条件是什么?
- 2021年PMP®考试改革
热门文章
- C#: PDF转图片(ghostscript)
- 主板电源接口测试软件,雷电接口加入! Intel原厂血统Z77测试
- Mac与Windows快捷键盘点
- ZEMAX双胶合透镜设计——光学设计学习笔记1
- 四川大学计算机学院优秀毕业论文,(完整版)四川大学本科_毕业论文(设计)_有关规定...
- 换掉7z-zip默认的ico图标,自定义压缩文件图标更美观。
- 好学易懂 从零开始的插头DP(一)
- 社工程序员(社会工程学)有关概述与讲解
- python自动生成文章原创_Python文章原创度检测脚本【亲测有效】
- PostgreSQL查询优化器详解(逻辑优化篇)