GoJS API学习

var node = {};
    node["key"] = "节点Key";
    node["loc"] = "0 0";//节点坐标
    node["text"] = "节点名称";
// 添加节点 通过按钮点击,添加新的节点到画布
myDiagram.model.addNodeData(node);
if (myDiagram.commandHandler.canDeleteSelection()) {
    // 删除选中节点,页面上有个按钮点击,可以删除选择的节点和线
    myDiagram.commandHandler.deleteSelection();
    return;
}
// 获得当前整个画布的json,获取当前画布的所有元素的json,用来保存
var model= myDiagram.model.toJson();
//model=eval(‘(‘+model+‘)‘);若格式异常抓一下
var nodes=model.nodeDataArray;取出所有节点
var Links=model.linkDataArray;取出所有线
// 加载json刷新画布,一般用来刷新和加载画布上的元素
model=myDiagram.model.toJson()
myDiagram.model = go.Model.fromJson(model);
// 通过节点key获取节点,知道节点key ,拿到这个节点的详细信息
var node = myDiagram.model.findNodeDataForKey(‘key‘);
var node = myDiagram.model.findNodeDataForKey(‘key‘);
//首先拿到这个节点的对象
myDiagram.model.setDataProperty(node, ‘color‘, "#ededed");
//然后对这个对象的属性进行更改,更改节点属性值,更改节点的颜色,或者大小等
// 获取获得焦点的第一个元素,可为节点或者线
var node=myDiagram.selection.first();
console.log(node.data.key);
// myDiagram.nodes获取所有获得焦点的节点
var items=‘‘;
  for(var nit=myDiagram.nodes;nit.next();){
        var node=nit.value;
       if(node.isSelected){
           items+=node.data.key+",";
         }
     }
console.log(items);
// 遍历整个画布的节点信息写法
for(var nit=myDiagram.nodes;nit.next();){
    var node=nit.value;
    var key=node.data.key;
    var text=node.data.text;
}
// 给节点添加线
myDiagram.model.addLinkData({ from: "节点的Key", to: "连到另一节点的key" })
var newdata = { "text":"AAAA", "key":-33,"loc":"0 0" };
    myDiagram.model.addNodeData(newdata);
    var newdat2= myDiagram.model.findNodeDataForKey(‘-3‘);
    console.log(newdat2);
    var node = myDiagram.findNodeForData(newdat2);
    console.log(node);
myDiagram.select(node);//选中节点
// 特殊案例API用法
myDiagram.findNodeForData(objNode);
myDiagram.findLinkForData(objLink);
// 其中objNode或者objLink,只能从画布的json 对象取出,不能直接手写例如
var newdata={"text":"AAAA","key":-33,"loc":"0 0"};
var node = myDiagram.findNodeForData(newdat2);
// 除了刚好是新建的节点外,,不然是获取不到这个对象的,因为添加节点时,gojs会自动给节点或者线添加一个属性
// 节点选中改变事件 selectionChanged: 回调的函数方法名
//该属性要写在$(go.Node,)内用大括号括起来
myDiagram.nodeTemplate =
   $(go.Node, "Horizontal",
        { selectionChanged: nodeSelectionChanged },
          //节点选中改变事件,nodeSelectionChanged为回调的方法名
        $(go.Panel, "Auto",
           $(go.Shape,//节点形状和背景颜色的设置
                { fill: "#1F4963" },
                 new go.Binding("fill", "color")
           ),
        )
    );//go.Node的括号

//回调方法 节点选中的时候是一种颜色,取消选中是另一种颜色
function nodeSelectionChanged(node) {
      if(node.isSelected) {//
         //节点选中执行的内容
         console.log(node.data);//节点的属性信息
         console.log(node.data.key);//拿到节点的Key,拿其他属性类似
         var node1 = myDiagram.model.findNodeDataForKey(node.data.key);
         myDiagram.model.setDataProperty(node1, "fill", "#ededed");
      } else {
         //节点取消选中执行的内容
         var node1 = myDiagram.model.findNodeDataForKey(node.data.key);
         myDiagram.model.setDataProperty(node1, ‘fill‘, "1F4963 ");
      }
}
// 节点双击事件
doubleClick : function(e, node){
  //node为当前双击的节点的对象信息
}
//该属性要写在$(go.node,)内用大括号括起来
myDiagram.nodeTemplate =
   $(go.Node, "Horizontal",
        $(go.Panel, "Auto",
           $(go.Shape,//节点形状和背景颜色的设置
                { fill: "#1F4963" },
                 new go.Binding("fill", "color")
           ),
           {doubleClick : function(e, node){// 双击事件
                             handlerDC(e, node);//双击执行的方法
                          }
           }
        )
    );//go.Node的括号

//双击执行的方法
function handlerDC(e, obj) {
     var node = obj.part;//拿到节点的json对象,后面要拿什么值就直接.出来
     var procTaskId = node.data.key;
     var procTaskName = node.data.text;
     var description = node.data.description;
     var procTmplId = node.data.tmplId;
}
// 该例子主要应用场景为,双击节点,得到节点的详细信息,弹出窗口修改节点的信息
// 从Palette拖过来节触发的事件
myDiagram.addDiagramListener("externalobjectsdropped", function(e) {
        console.log(e);
});

myDiagram.addDiagramListener("externalobjectsdropped", function(e) {
        e.subject.each(function(n){
            //得到从Palette拖过来的节点
                 console.log(n.data.key);
         });
});
// 当前画布被拖动的节点     未测试
myDiagram.addDiagramListener("Modified", function(e) {
        myDiagram.isModified = false;

        iter = myDiagram.selection.iterator;

        while (iter.next()) {
            var part = iter.value;
            if (part instanceof go.Link) {
               if ( ( part.data.from == 0 || part.data.from == undefined) || ( part.data.to == 0 || part.data.to == undefined )  ) {
                    myDiagram.model.setDataProperty(part.data, ‘link-color‘, ‘red‘);
                    console.log(part.data);
                    console.log("非法");
               } else if(part.data.from > 0 || part.data.from < 0 ) {
                    var node = myDiagram.findNodeForKey(part.data.from);
                    if (!node) {
                        console.log("非法");
                    }
               }else if(part.data.to > 0 || part.data.to < 0 ) {
                    var node = myDiagram.findNodeForKey(part.data.to);
                    if (!node) {
                        console.log("非法");
                    }
               }
            }
        }
var $ = go.GraphObject.make;
// 定义画布的基本属性 这里绑定画布所用的div,并保存在myDiagram中,后续的节点设置均使用这个变量,意思是在这个画布上定义节点和操作节点
myDiagram = $(go.Diagram, "myDiagram", //画布绑定的Div的ID
    {
        initialContentAlignment: go.Spot.Center, // 画布的位置设置(居中,靠左等)
        allowDrop: true, // must be true to accept drops from the Palette
        "LinkDrawn": showLinkLabel, //
        "LinkRelinked": showLinkLabel,
        "animationManager.duration": 600, // 画布刷新的加载速度
        "undoManager.isEnabled": true, // "toolManager.mouseWheelBehavior": go.ToolManager.WheelZoom,
        allowZoom: true    // 允许缩放,false为否
        isReadOnly: false // 是否禁用编辑 false否,
        true是 //ismodelfied:true //禁止拖拽

});
// 定义单种节点
myDiagram.nodeTemplate=$(go.Node,***)
//***为对节点的定义
myDiagram.nodeTemplate =
   $(go.Node, "Horizontal",
        { selectionChanged: nodeSelectionChanged },
          //节点选中改变事件,nodeSelectionChanged为回调的方法名
        $(go.Panel, "Auto",
            $(go.Shape,//节点形状和背景颜色的设置
                { fill: "#1F4963", stroke: null }
            ),
            $(go.TextBlock,
                { font: "bold 13px Helvetica, bold Arial, sans-serif",//字体
                  editable:true,
                  stroke: "white",//颜色
                  margin: 3 },
                  new go.Binding("text", "key")
            )//go.TextBlock,的括号
       )//go.Panel 的括号
    );//go.Node的括号
// 定义多种节点(画布上有多种节点)
myDiagram.nodeTemplateMap.add("A种节点",$(go.Node,***))
//一种类型的节点
myDiagram.nodeTemplateMap.add("Start",
       $(go.Node, "Spot",
            $(go.Panel, "Auto",
                 $(go.Shape, "Circle", {
                     minSize: new go.Size(40, 40),
                     fill: "#79C900",
                     stroke: null
                 })
            )
        )//go.Node的括号
);
//另一种类型的节点
myDiagram.nodeTemplateMap.add("End",
       $(go.Node, "Spot",
            $(go.Panel, "Auto",
                 $(go.Shape, "Circle", {
                     minSize: new go.Size(40, 40),
                     fill: "#DC3C00",
                     stroke: null
                 })
            )
       )//go.Node的括号
);

//添加不同种类的节点
      var node = {};
      node["text"] = "2222";
      node["key"] = "33";
      node["loc"] = "0 0";
      node["category"] = "Start";//category
      myDiagram.model.addNodeData(node);
// 定义线
myDiagram.linkTemplate=$(go.Link,***);
//添加监听节点生成事件
myDiagram.addDiagramListener("externalobjectsdropped", function(e) {
        e.subject.each(function(n){
                console.log(n.data.key);
           });
});
//添加监听线生成事件
myDiagram.addDiagramListener("LinkDrawn", function(e) {
    console.log(e.subject.data.to);
})
//监听节点删除事件
myDiagram.addDiagramListener("SelectionDeleted", function(e) {
        e.subject.each(function(n){
        console.log(n.data.key);
    });
})

GoJS API

原文地址:https://www.cnblogs.com/Alwaysbecoding/p/11846943.html

时间: 2024-10-14 04:20:04

GoJS API学习的相关文章

野兽的Angular Api 学习、翻译及理解 - - form.FormController、ngModel.NgModelController

野兽的ng api学习 -- form.FormController.ngModel.NgModelController form.FormController FormController跟踪所有他所控制的和嵌套表单以及他们的状态,就像有效/无效或者脏值/原始. 每个表单指令创建一个FormController实例. 方法: $addControl(); 给表单注册一个控制器. 使用了ngModelController的输入元素会在连接时自动执行. $removeControl(); 给表单注

@野兽的Angular Api 学习、翻译及理解 - - angular.module

@野兽的 ng api 学习 -- angular.module angular.module 创建一个全局的可用于检索和注入的Angular模块.所有Angular模块(Angular核心模块或者第三方模块)想要在应用里实现,都需要使用这个注入机制. 格式:angular.module(name,[requires],[configFn]); name :  string  创建的模块名称. [requires]: 字符串的数组  代表该模块依赖的其他模块列表,如果不依赖其他模块,则为空数组.

野兽的Angular Api 学习、翻译及理解 - - ngRoute Angular自带的路由

野兽的ng api学习 -- ngRoute ngRoute $routeProvider 配置路由的时候使用. 方法: when(path,route); 在$route服务里添加一个新的路由. path:该路由的路径. route:路由映射信息. controller:字符串或函数,指定控制器. controllerAs:一个用于控制器的标识符名称.. template:字符串或函数,html模板. templateUrl:字符串或函数,html模板的地址. resolve:对象,一个可选的

野兽的Angular Api 学习、翻译及理解 - - $templateCache 和 $templateRequest

野兽的ng api学习 -- $templateCache 和 $templateRequest $templateCache 第一次使用模板,它被加载到模板缓存中,以便快速检索.你可以直接将模板标签加载到缓存中,或者通过$templateCache服务. 通过script标签: <script type=”text/ng-template” id=”template.html”> <p>This is the content of the template</p> &

野兽的Angular Api 学习、翻译及理解 - - $sce 和 $sceDelegate

野兽的ng api学习 -- $sce 和 $sceDelegate $sce $sce 服务是AngularJs提供的一种严格上下文逸出服务. 严格上下文逸出服务(翻译水平有限,较渣...) 严格上下文逸出(SCE)是一种需要在一定的语境中导致AngularJS绑定值被标记为安全使用语境的模式.由用户通过ng-bind-html绑定任意HTML语句就是这方面的一个例子.我们称这些上下文语境为特权或者SCE. 下面代码是简化了的ngBindHtml实现(当然,这不是完整版ngBindHtml源码

野兽的Angular Api 学习、翻译及理解 - - $q 承诺与延迟

野兽的ng api学习 -- $q $q 一个帮助处理异步执行函数的服务.当他们做完处理时,使用它们的返回值(或异常). 受 Kris Kowa’s Q 的启发,这是一个实现promise/deferred对象的启用. $q的两种方式---这是一个更类似于Kris Kowal Q或jQuery的递延实现,另一种在一定程度上类似的ES6承诺. Deferred Api 一个被$q.defer()调用的deferred的新实例. deferred对象的目的是暴露相关承诺实例,以及APIs被执行的成功

野兽的Angular Api 学习、翻译及理解 - - $animate

野兽的ng api学习 -- $animate $animate $animate服务提供了基本的DOM操作功能如在DOM里插入.移除和移动元素,以及添加和删除类.这个服务是ngAnimate的核心服务,为CSS和Javascript提供了高档次的动画. $animate在Angular核心都是有效的,无论如何,这个服务为了支持所有动画须包含ngAnimate模块.否则,$animate只能做简单的DOM操作. 方法: enter(element,parent,after,[done]); 在D

野兽的Angular Api 学习、翻译及理解 - - ngInclude、ngTransclude

野兽的 ng api 学习 - - ngInclude.ngTransclude 这2个都是HTML DOM嵌入指令 ngInclude 读取,编译和插入外部的HTML片段. 格式:ng-include=“value”<ng-include src=”value” onload=“ex”autoscroll=“str”></ng-include>  class=”ng-include:value” value:string类型  模板id或者模板url ex:表达式,载入的时候执行

野兽的Angular Api 学习、翻译及理解 - - ngIf、ngSwitch、ngHide/ngShow

野兽的 ng api 学习 - - ngIf.ngSwitch.ngHide/ngShow 在组合这些ng指令写到一篇文章里的时候,基本是有规则的,野兽把功能相似相近的一类大多会组合到一起,方便理解和记忆. 这篇的三个指令也都是对DOM元素的操作,页面上显示/隐藏的判断,添加/移除的判断. ngIf ngIf指令会根据指定的表达式返回的boolean类型值对该元素做添加到/移除出Dom树的操作. 格式:ng-if=“value” value:表达式  返回结果为boolean类型. 使用代码: