画布

获取当前画布的json myDiagram.model.toJson();
加载json刷新画布 myDiagram.model = go.Model.fromJson(model);
删除选中节点或线 myDiagram.commandHandler.deleteSelection();

获取选中的节点或线

myDiagram.selection

 
  1. //用例获取选中的节点或线

  2. var nodeOrLinkList=myDiagram.selection;

  3. nodeOrLinkList.each(function(nodeOrLink) {

  4. console.log(nodeOrLink.data);

  5. });

  6. //获取第一个选中的节点或线

  7. var nodeOrLink=myDiagram.selection.first()

获取画布所有节点对象

myDiagram.nodes

 
  1. var nodes=myDiagram.nodes;

  2. //遍历输出节点对象

  3. nodes.each(function (node) {

  4. console.log(node.data.text);

  5. });

节点

添加节点 myDiagram.model.addNodeData(nodeData);
删除节点 myDiagram.model.removeNodeData(nodeData);
选中单个节点(不能批量选中) myDiagram.select(node);
更改属性值 myDiagram.model.setDataProperty(nodeData, 'color', "#ededed");

根据节点数据对象

更改节点属性

myDiagram.model.updateTargetBindings(nodeData);

 
  1. var nodeData = myDiagram.model.findNodeDataForKey('4.1');

  2. nodeData.text = "2333"

  3. nodeData.color = "#000000";

  4. myDiagram.model.updateTargetBindings(nodeData);

获取节点对象 var node=myDiagram.findNodeForKey('key');
获取节点data var nodeData=myDiagram.model.findNodeDataForKey('key');

批量删除节点

myDiagram.model.removeNodeDataCollection(nodes)

 
  1. var removeNodes = []; 

  2. var aNodeData = myDiagram.model.findNodeDataForKey('Akey');

  3. var bNodeData = myDiagram.model.findNodeDataForKey('Bkey');

  4. removeNodes.push(aNodeData );

  5. removeNodes.push(bNodeData);

  6. myDiagram.model.removeNodeDataCollection(removeNodes);

模糊获取节点(版本1.68以上)

注意值类型,字符串和数值

myDiagram.findNodesByExample(data);

匹配方式默认为===运算符进行比较。

/abc/ 匹配包含“abc”的任何字符串
/abc/i 匹配包含“abc”的任何字符串,忽略大小写
/^no/i 匹配任何以“no”开头的字符串,忽略大小写
/ism$/匹配任何以“ism”结尾的字符串
/(green|red) apple/ 匹配包含“green apple”或“red apple”的字符串

官网还有更多的匹配方式,这里就不列举了

 
  1. //注意值类型,字符串和数值,

  2. //如果json中是1.1,写成"1.1"就会查询不到

  3. var data={};

  4.    data.text="设计";

  5. // data.text=/设计/;

  6. // data.text=/设计/i;

  7. // data.text=/^设计/;

  8. // data.text=/设计$/;

  9. // data.text=/(勘|察)设计/;

  10. var nodes = myDiagram.findNodesByExample(data);

  11.     nodes.iterator.each(function (node) {

  12.       console.log(node.data);

  13. });

线

添加线 myDiagram.model.addLinkData(linkData);
删除线 myDiagram.model.removeLinkData(linkData);

批量删除线

{Array|iterator} removeLinks

removeLinkDataCollection(removeLinks);

 
  1. var removeLinks=[];

  2. //首先拿到这个节点的对象

  3. var node = myDiagram.findNodeForKey('key');

  4. //获取节点所有线

  5. node.findLinksConnected().each(function(link) { 

  6.      removeLinks.push(link.data);

  7.     }

  8.  );

  9. myDiagram.model.removeLinkDataCollection(removeLinks);

模糊获取线(版本1.68以上)

注意值类型,字符串和数值

myDiagram.findLinksByExample(data);

匹配 方式和模糊获取节点的规则一致

 
  1. //注意值类型,字符串和数值

  2. //如果json中是from:1.1,写成from:"1.1"就会查询不到

  3. var links=myDiagram.findLinksByExample({from:1.1, to:2.1});

  4. links.iterator.each(function (link) {

  5.      console.log(link.data);

  6. });

更改属性值 myDiagram.model.setDataProperty(linkData, 'from', "-2");

获取节点的线

{string | null =} PID 端口ID

findLinksConnected(PID)

var node=myDiagram.findNodeForKey('key');

node.findLinksConnected().each(function(link) {console.log(link.data)});

获取进入节点的线

{string | null =} PID 端口ID

findLinksInto(PID)

var node=myDiagram.findNodeForKey('key');

node.findLinksInto().each(function(link) {console.log(link.data)});

获取从节点出来的线

{string | null =} PID 端口ID

findLinksOutOf(PID)

var node=myDiagram.findNodeForKey('key');

node.findLinksOutOf().each(function(link) {console.log(link.data)});

获取A-B节点之间的线
{node } othernode B节点对象
{string | null =} PID 端口ID
{string | null =} otherPID B节点端口ID

findLinksTo(othernode, PID, otherPID)

var nodeA=myDiagram.findNodeForKey('key');

var nodeB=myDiagram.findNodeForKey('key');

nodeA.findLinksTo(nodeB).each(function(link) {console.log(link.data)});

   
   

树节点

根据甲,找甲的祖宗十八代(包括甲)

node.findTreeParentChain();

 
  1. node.findTreeParentChain().each(function(pNode) {

  2. console.log(pNode.data)

  3. });

根据甲,找甲的子孙十八代(包括甲)

node.findTreeParts();

 
  1. node.findTreeParts().each(function(sNode) {

  2. console.log(sNode.data)

  3. });

根据甲,找甲的父亲

node.findTreeParentNode();

var pNode=node.findTreeParentNode();  

根据甲,找甲的孩子们

node.findTreeChildrenNodes();

 
  1. node.findTreeChildrenNodes().each(function(cNode) {

  2. console.log(cNode.data)

  3. });

根据甲,获取甲和其孩子的关系

node.findTreeChildrenLinks();

未测

gojs操作画布常用API

  API 用例

addNodeData(节点对象);

addLinkData(线对象);

 
  1. var node = {};

  2. node["key"] = "节点Key";

  3. node["loc"] = "0 0";//节点坐标

  4. node["text"] = "节点名称";

  5. myDiagram.model.addNodeData(node);

removeNodeData(节点对象)

removeLinkData(线对象);

 
  1. //首先拿到这个节点的对象,这里直接通过节点的Key获取,

  2. //也可以通过各种事件的返回的对象中获取

  3. var nodeData = myDiagram.model.findNodeDataForKey('key');

  4. //删除单个节点

  5. myDiagram.model.removeNodeData(nodeData);

参数:

data:  nodeData或linkData

propname:属性名

val:修改的值

setDataProperty(data, propname, val);

 
  1. //首先拿到这个节点的data对象

  2. var nodeData = myDiagram.model.findNodeDataForKey('key');

  3. //然后对这个对象的属性进行更改,如果没有则新增这个属性

  4. myDiagram.model.setDataProperty(nodeData, 'color', "#ededed");

根据key获取节点data对象

findNodeDataForKey('节点key');

根据linkData模糊匹配线集合

(gojs1.68以上)

findLinksByExample(linkData)

 
  1. //根据Key获取节点数据对象

  2. var nodeData = myDiagram.model.findNodeDataForKey('key');

  3. //根据linkData,模糊匹配线集合,linkData可以为部分属性组成

  4. //如from:-1或to:-1,或者from:-1,to:-1

  5. var links=myDiagram.findLinksByExample({"from":-1, "to":-2});

  6. while (links.next()) {

  7. //遍历输出所有线数据对象

  8. console.log(links.value.data);

  9. }

gojs 函数实践

1、添加节点

  1.  
    var CreateNode={
  2.  
    key:getNextKey(), //设置key的方法,每个节点最好是有自己独立的key
  3.  
    "category":"nodeStyleOne", //节点样式选择?nodeStyleOne? => 你自己定义的样式名
  4.  
    "loc":"",
  5.  
    "text":"节点的text值",//也阔以是动态的值
  6.  
    source:“123.svg”,//也阔以是动态的路径
  7.  
    }
  8.  
    myDiagram.model.addNodeData(CreateNode);

2、动态加线

myDiagram.model.addLinkData({"from":连线起点的key, "to":连线终点key,"category":样式名});

gojs最佳教程: http://www.devtalking.com/categories/%E5%89%8D%E7%AB%AF/

https://liuxiaofan.com/2018/03/16/3521.html

https://www.jianshu.com/p/f91fbf085574

http://www.aubreyling.com/category/javascript/gojs/

数据绑定

事件

参考以上考程,能基本上把gojs弄懂

gojs常用API-画布操作的更多相关文章

  1. gojs常用API (中文文档)

    常用API   操作类API   API 例子 应用场景 添加节点 myDiagram.model.addNodeData(node); var node = {}; node["key&q ...

  2. gojs常用API

    操作类API: 添加节点: myDiagram.model.addNodeData(node); var node = {}; node["key"] = "节点Key& ...

  3. Java常用api和操作必背

    1.数组排序 Java的Arrays类(java.util中)包含用来操作数组(比如排序和搜索)的各种方法. Arrays.sort(各种类型数组) 2.数组转字符串 1)打印数组时可用Arrays. ...

  4. Java学习笔记五 常用API对象一

    常用API:字符串操作:String类,StringBuffer类,StringBulider类 字符串是最重要的数据类型之一,处理字符串也是一种语言的基本工作. 1.String类: public ...

  5. Javascript操作DOM常用API总结

    基本概念 在讲解操作DOM的api之前,首先我们来复习一下一些基本概念,这些概念是掌握api的关键,必须理解它们. Node类型 DOM1级定义了一个Node接口,该接口由DOM中所有节点类型实现.这 ...

  6. node.js整理 02文件操作-常用API

    NodeJS不仅能做网络编程,而且能够操作文件. 拷贝 小文件拷贝 var fs = require('fs'); function copy(src, dst) { fs.writeFileSync ...

  7. JS操作DOM常用API总结

    <JS高程>中的DOM部分写的有些繁琐,还没勇气整理,直到看到了这篇博文 Javascript操作DOM常用API总结,顿时有了一种居高临下,一览全局的感觉.不过有时间还是得自己把书里面的 ...

  8. JavaScript 操作 DOM 常用 API 总结

    文本整理了javascript操作DOM的一些常用的api,根据其作用整理成为创建,修改,查询等多种类型的api,主要用于复习基础知识,加深对原生js的认识. 基本概念 在讲解操作DOM的api之前, ...

  9. [总结]JS操作DOM常用API详解

    文本整理了javascript操作DOM的一些常用的api,根据其作用整理成为创建,修改,查询等多种类型的api,主要用于复习基础知识,加深对原生js的认识. 基本概念 在讲解操作DOM的api之前, ...

随机推荐

  1. java基于NIO的分散读取文件,然后统一聚合后写入文件

    分散读取:对于一个文件,可以分散的读取数据,可以快速的读取,好比多个线程在分段同时读取: 聚合写入:为了提高效率,一般读取到的数据都是分散的,要快速写入,就需要把分散的数据聚集在一起,然后一块写入到文 ...

  2. sql server 查看连接详情

    SELECT * FROM [Master].[dbo].[SYSPROCESSES] WHERE [DBID] IN ( SELECT [DBID] FROM [Master].[dbo].[SYS ...

  3. AppSetting配置工具类

    <?xml version="1.0" encoding="utf-8"?> <!-- 有关如何配置 ASP.NET 应用程序的详细信息,请访 ...

  4. 小鸟初学Shell编程(八)环境变量、预定义变量与位置变量

    环境变量 环境变量:每个Shell打开都可以获得到的变量. 我们知道通过export的方式打开可以让子进程读取父进程的变量的值,那怎么样才能让每一个进程都能读取到变量的值呢? 在这呢,系统有一些默认的 ...

  5. 用python登录12306 并保存cookie

    一篇拿来记录的文章,是看其他博主写的,想在这记一下 import sys import time import requests from PIL import Image import json i ...

  6. 13.生产环境中的 redis 是怎么部署的?

    作者:中华石杉 面试题 生产环境中的 redis 是怎么部署的? 面试官心理分析 看看你了解不了解你们公司的 redis 生产集群的部署架构,如果你不了解,那么确实你就很失职了,你的 redis 是主 ...

  7. Apache:系统找不到指定的文件: No installed ConfigArgs for the service "Apache2"

    解决方法: 将以下内容保存成FixApacheError.reg文件(其中红色粗体Apache2改成报错的系统服务名称,如"RTX_HTTPServer"),导入系统注册表 Fix ...

  8. 经典的卷积神经网络及其Pytorch代码实现

    1.LeNet LeNet是指LeNet-5,它是第一个成功应用于数字识别的卷积神经网络.在MNIST数据集上,可以达到99.2%的准确率.LeNet-5模型总共有7层,包括两个卷积层,两个池化层,两 ...

  9. nginx 的 一些配置说明

    default 配置参考https://www.cnblogs.com/kuku0223/p/10740735.html 设置了default     除了指定的域名,  如果是没有配置的域名解析过来 ...

  10. Docker容器数据卷(七)

    Docker致力于: 将运用与运行的环境打包形成容器运行 ,运行可以伴随着容器,但是我们对数据的要求希望是持久化的 容器之间希望有可能共享数据 Docker容器产生的数据,如果不通过docker co ...