vue中go.js的使用教学(四:模型及模板)

news2025/2/27 16:19:53

目录

一、使用代码构建图表

 二、使用模型和模板

a、创建基础图表

b、定义模板(将节点模板定义为我们上面所做的特定节点构造的泛化)

 三、使用数据绑定参数化节点

 a、使用数据绑定参数化节点

 扩展:修改模型


一、使用代码构建图表

场景,选中两个值,点击确定使他们生成一个相连的图表

让我们尝试构建两个节点并使用链接连接它们。这是一种方法:

eg:创建爱你两个node节点,并添加到diagram实例上,diagram是通过div上的id创建的那个。然后在通过添加一个go.Link,使node1链接node2.

var node1 =
    $(go.Node, "Auto",
      $(go.Shape,
        { figure: "RoundedRectangle",
          fill: "lightblue" }),
      $(go.TextBlock,
        { text: "Alpha",
          margin: 5 })
    )
  diagram.add(node1);

  var node2 =
    $(go.Node, "Auto",
      $(go.Shape,
        { figure: "RoundedRectangle",
          fill: "pink" }),
      $(go.TextBlock,
        { text: "Beta",
          margin: 5 })
    );
  diagram.add(node2);

  diagram.add(
    $(go.Link,
      { fromNode: node1, toNode: node2 },
      $(go.Shape)
    ));

生成的图 :

 

 二、使用模型和模板

如果要自定义图中节点的外观,可以通过设置 Diagram.nodeTemplate 来替换默认节点模板。

若要自动使用模板,请为关系图提供一个模型,其中包含每个节点的数据和每个链接的数据。GraphLinksModel 将节点数据和链接数据的集合(实际上是数组)保存为 GraphLinksModel.nodeDataArray 和 GraphLinksModel.linkDataArray 的值。 然后设置 Diagram.model 属性,以便关系图可以为所有节点数据创建节点s,为所有链接数据创建链接s。

a、创建基础图表

特定的节点数据已被放入 JavaScript 对象数组中。我们在单独的链接数据对象数组中声明链接关系。每个链接数据都使用其键保存对节点数据的引用。通常,引用是“from”和“to”属性的值。

 var nodeDataArray = [
    { key: "Alpha"},
    { key: "Beta" }
  ];
  var linkDataArray = [
    { from: "Alpha", to: "Beta" }
  ];
  diagram.model = new go.GraphLinksModel(nodeDataArray, linkDataArray);

生成的图:

b、定义模板(将节点模板定义为我们上面所做的特定节点构造的泛化)

 diagram.nodeTemplate =  // 创建模板
    $(go.Node, "Auto",
      $(go.Shape,
        { figure: "RoundedRectangle",//框类型
          fill: "white" }),//白色背景
      $(go.TextBlock,
        { text: "hello!",//显示为hello
          margin: 5 })
    );
   //模板的数组
  var nodeDataArray = [
    { key: "Alpha" },
    { key: "Beta" }
  ];
   //模板的线链接对象
  var linkDataArray = [
    { from: "Alpha", to: "Beta" }//从Alpha链接到Beta
  ];
  diagram.model = new go.GraphLinksModel(nodeDataArray, linkDataArray);

生成的图:节点尚未参数化 - 它们都是相同

 

 三、使用数据绑定参数化节点

 a、使用数据绑定参数化节点

我们要确保 TextBlock.text 属性获取相应节点数据的“键”值。我们希望确保 Shape.fill 属性设置为由相应节点数据的 “color” 属性值给出的颜色/画笔。可以通过创建 Binding 对象并将它们与目标 GraphObject 相关联来声明这样的数据绑定。

diagram.nodeTemplate =
    $(go.Node, "Auto",
      $(go.Shape,
        { figure: "RoundedRectangle",
          fill: "white" },  // default Shape.fill value
        new go.Binding("fill", "color")),  // 把数组中的color绑定到Shape的fill上
      $(go.TextBlock,
        { margin: 5 },
        new go.Binding("text", "key"))  // // 把数组中的key值绑定到TextBlock的text上
    );

  var nodeDataArray = [
    { key: "Alpha", color: "lightblue" },  // 这边的值会被遍历循环
    { key: "Beta", color: "pink" }
  ];
  var linkDataArray = [
    { from: "Alpha", to: "Beta"}
  ];
  diagram.model = new go.GraphLinksModel(nodeDataArray, linkDataArray);

生成的图:

 

 扩展配置:树模型,从上到下链接

仅支持形成树结构图的链接关系。没有单独的链接数据,因此没有“linkDataArray”。

diagram.nodeTemplate =
    $(go.Node, "Auto",
      $(go.Shape,
        { figure: "Ellipse" },
        new go.Binding("fill", "color")),
      $(go.TextBlock,
        { margin: 5 },
        new go.Binding("text", "key"))
    );

  var nodeDataArray = [
    { key: "Alpha", color: "lightblue" },
    { key: "Beta", parent: "Alpha", color: "yellow" },  // 通过parent指定父亲指向自己
    { key: "Gamma", parent: "Alpha", color: "orange" },
    { key: "Delta", parent: "Alpha", color: "lightgreen" }
  ];
  diagram.model = new go.TreeModel(nodeDataArray);

生成的图:

 扩展:修改模型

如果要以编程方式添加或删除节点,则可能需要调用 Model.addNodeData 和 Model.removeNodeData 方法。使用 Model.findNodeDataForKey 方法查找特定节点数据对象(如果只有其唯一键值)。您也可以调用 Model.copyNodeData 来复制节点数据对象,然后可以修改该对象并将其传递给 Model.addNodeData。

简单地修改 Model.nodeDataArray 是行不通的,因为 GoJS 软件不会收到任何 JavaScript 数组任何更改的通知,因此没有机会根据需要添加或删除 Node或其他部分。

同样,简单地修改节点数据对象的属性也是行不通的。依赖于该属性的任何绑定都不会收到有关任何更改的通知,因此它将无法更新其目标 GraphObject 属性。例如,设置 color 属性不会导致 Shape 更改颜色。

var data = myDiagram.model.findNodeDataForKey("Delta");
    // 这个方式是不生效的
    if (data !== null) data.color = "red";

生效:

 var data = myDiagram.model.findNodeDataForKey("Delta");
    // 这个方式可以更新
    if (data !== null) myDiagram.model.setDataProperty(data, "color", "red");

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/361387.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Goreplay使用教程0221

1、简介Goreplay 是用 Golang 写的一个HTTP 实时流量复制工具。功能更强大,支持流量的放大、缩小,频率限制,还支持把请求记录到文件,方便回放和分析,也支持和 ElasticSearch 集成,将流量存入 ES 进行实时分…

2023 Softing在线培训计划

通过以实践为导向的培训课程提高能力 小型和模块化的培训研讨会,是一种以实践为导向的用户研讨会,并结合了深厚的理论知识。通过Softing的初级和高级研讨会,我们将帮助您应对日常挑战。我们还为初学者和高级用户提供了有关车辆诊断和通信工具…

一维,二维差分の详解(简单易懂)

一,差分定义差分,就是前缀和的逆运算。二,具体过程1.一维差分例题构造差分数组首先给定一个原数组a:a[1], a[2], a[3],,,,,, a[n];然后我们构造一个数组b : b[1], b[2], b[3],,,,,, b[i];使得 a[i] b[1] b[2] b[3] ,,,,,, b[i]也就是说,…

数据挖掘,计算机网络、操作系统刷题笔记52

数据挖掘,计算机网络、操作系统刷题笔记52 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,orac…

【Linux】vim的使用及常用快捷键(不会使用vim?有这篇文章就够了)

🔥🔥 欢迎来到小林的博客!!       🛰️博客主页:✈️小林爱敲代码       🛰️欢迎关注:👍点赞🙌收藏✍️留言 目录💖vim的基本概念vi…

C语言——动态内存管理

目录0. 思维导图:1. 为什么存在动态内存分配2. 动态内存函数介绍2.1 malloc和free2.2 calloc2.3 realloc3. 常见的动态内存错误3.1 对NULL指针的解引用操作3.2 对动态内存开辟的空间越界访问3.3 对非动态开辟内存使用free释放3.4 使用free释放一块动态开辟内存的一部…

读书笔记//来自公众号(2)

非常喜欢阅读同行的文章,彷佛进行一场隔空交流。大家都是数据分析师,有许多共鸣;了解数据分析在不同行业的应用,往往很有收获。 这位朋友在零售行业、工业物联网、汽车互联网、2G电商等做个数据分析,有10多工作经验。…

【STC8A8K64D4开发板】——搭建开发环境

第1-2讲:搭建开发环境 需要安装的工具软件 表1:需要的工具软件 序号 软件工具 说明 1 Keil C51 9.52安装文件 Keil C51集成开发环境。 2 ch341ser驱动 USB最新驱动可到沁恒官网下载:www.wch.cn/downloads/CH341SER_EXE.html 3 st…

JVM运行时数据区

在上篇文章中我们详细介绍了JVM类加载子系统:https://blog.csdn.net/u011837804/article/details/129049418,Class文件被类加载子系统加载后就进入到了运行时数据区等待执行引擎执行,运行时数据区也是JVM中最重要的一部分,GC、OOM…

基于springboot+mybatis+mysql+vue运动会报名管理系统

基于springbootmybatismysqlvue运动会报名管理系统一、系统介绍二、功能展示1.用户登陆2.报名详情(运行员)3.比赛报名(运动员)4.个人参赛项目(运动员)5.加油稿展示(运动员)6.学院积分排名(运动员…

Spring MVC 源码 - HandlerMapping 组件(三)之 AbstractHandlerMethodMapping

HandlerMapping 组件HandlerMapping 组件,请求的处理器匹配器,负责为请求找到合适的 HandlerExecutionChain 处理器执行链,包含处理器(handler)和拦截器们(interceptors)handler 处理器是 Objec…

K_A12_022 基于STM32等单片机驱动VL53L0X模块 串口与OLED0.96双显示

K_A12_022 基于STM32等单片机驱动VL53L0X模块 串口与OLED0.96双显示一、资源说明二、基本参数参数引脚说明三、驱动说明UART对应程序:IIC对应程序:四、部分代码说明1、接线引脚定义1.1、STC89C52RCVL53L0X模块1.2、STM32F103C8T6VL53L0X模块五、基础知识学习与相关资料下载六、…

打印流、转换流、数据流 、随机访问流

Java知识点总结:想看的可以从这里进入 目录5、打印流6、转换流7、数据流8、随机访问流5、打印流 实现将基本数据类型的数据格式转化为字符串输出,它们提供了一系列重载的print()和println()方法,用于多种数据类型的输出,这种流不会…

基于react+typescript的前端组件库violet-design(字节青训营项目)

文章目录前言一、项目介绍💌 介绍特性兼容性📦 安装使用 npm 安装使用 yarn 安装浏览器引入🔨 示例1. 引入样式2. 使用组件按需加载TypeScript✨ 组件🔗 链接二、项目实现2.1 技术选型2.2 架构设计2.2.1 目标用户和场景2.2.2 组件…

容器技术概述

容器化应用程序 软件应用程序通常依赖于运行时环境提供的其他库、配置文件或服务。软件应用程序的传统运行环境是物理主机或虚拟机,应用程序依赖项作为主机的一部分安装。 例如,考虑一个 Python 应用程序,它需要访问实现 TLS 协议的公共共享…

第 16 章_多版本并发控制

第 16 章_多版本并发控制 1. 什么是MVCC MVCC (Multiversion Concurrency Control),多版本并发控制。顾名思义,MVCC 是通过数据行的多个版本管理来实现数据库的并发控制。这项技术使得在InnoDB的事务隔离级别下执行一致性读操作…

剑指 Offer 27. 二叉树的镜像

剑指 Offer 27. 二叉树的镜像 难度:easy\color{Green}{easy}easy 题目描述 请完成一个函数,输入一个二叉树,该函数输出它的镜像。 例如输入: 镜像输出: 示例 1: 输入:root [4,2,7,1,3,…

Office 365 备份与恢复

Microsoft Office 365中的不同服务几乎可以随时访问,这要归功于Microsoft的99.9%正常运行时间记录。但是,Office 365步履蹒跚的一个方面是提供了一种从意外数据丢失中恢复的方法。Microsoft 提供的数据保留功能并非适用于所有数据丢失情况的可行解决方案…

亿级高并发电商项目-- 实战篇 --万达商城项目 十二(编写用户服务、发送短信功能、发送注册验证码功能、手机号验证码登录功能、单点登录等模块)

👏作者简介:大家好,我是小童,Java开发工程师,CSDN博客博主,Java领域新星创作者 📕系列专栏:前端、Java、Java中间件大全、微信小程序、微信支付、若依框架、Spring全家桶 &#x1f4…

Leetcode力扣秋招刷题路-0082

从0开始的秋招刷题路,记录下所刷每道题的题解,帮助自己回顾总结 82. 删除排序链表中的重复元素 II 给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。 示例 1&#…