首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将角创建元素与D3集成的最简单方法

将角创建元素与D3集成的最简单方法
EN

Stack Overflow用户
提问于 2014-04-22 14:40:41
回答 1查看 1.7K关注 0票数 10

在学习这两种框架的背景下,我正在尝试不同的集成D3和Angular的方法,并希望得到一些输入:

我的客户端应用程序从我的服务器接收一个JSON节点数组和一个边缘数组。客户端的核心组件是一个以D3力为导向的布局实现的图形可视化:对于节点数组中的每个节点,在该可视化中添加一个(SVG)圆元素,并为边缘数组中的每个边缘添加这些圆圈之间的线条。

当然,D3的selection.data( )使添加这些元素并将每个元素绑定到它所表示的数据变得非常简单,但是图形可视化只是一个大得多的应用程序的一部分:我需要创建不同类型的元素,它们代表应用程序不同部分中的相同节点和边缘(D3与此无关),我希望将所有这些元素绑定到一个数据集中。

我的主要目标是最小化代码复杂性,尽管我爱上了d3的数据绑定功能的简单性和优雅性,但我得出了一个初步的结论:在应用程序的一个部分使用它,而在其他部分使用它来做同样的事情,就会产生不必要的复杂性,而最简单的方法将是使用角来处理数据绑定/元素创建。

换句话说,与其使用selection.data( ).enter( ).append( )来创建SVG元素,我还认为我应该使用ng-repeat="node in nodes"来创建这些元素,也许可以将它们作为一个自定义指令来创建,以允许自定义功能。这样做之后,我就需要将这些元素“放入”D3,即由其强制导向的布局来管理。

是我在这里的推理吗?尤其是,我担心我忽略了这会造成物体恒定性的复杂情况,这是一个重要的要求,因为节点将不断地进入、退出和移动屏幕,我需要这些转换是平滑的。您建议我如何将角创建的元素集成到D3中(更准确地说,将它们放到force.nodes{ }force.links( )数组中),以避免任何这样的复杂情况?

最后,我还在考虑一种策略,我希望这两种策略都能给我最好的结果:我可以使用D3来创建SVG元素并将它们绑定到它们各自的数据,但是与其在可视化指令的link函数中执行该代码(就像我一直在做的那样,而且正如我发现的所有角/d3教程所做的那样),我可以在compile函数中运行它,并执行如下操作:

代码语言:javascript
运行
AI代码解释
复制
d3.select('SVG')
  .selectAll('.node')
  .data('nodeDataArray')
  .enter( )
  .append('circle')
  .attr("class", "node-icon"); //...other attributes/styles etc  

其中,node-icon是带有包含Crestrict属性的指令的规范化名称。如果这在compile方法中运行,angular应该按照正常的方式编译所有这些指令,添加任何附加的功能/接口到其他指令(等等),就像它对任何其他类型的元素所做的那样。对吗?

这是我最直观地被吸引的选择--我可能会忽略其中的任何缺陷,这可能会使前一种策略更可取吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-09 05:13:33

我已经思考了几乎相同的问题一段时间,并得出以下结论。

将角创建元素与d3集成的最简单方法是使用.attr添加指令,然后在d3生成的元素上添加编译服务.call。如下所示:

代码语言:javascript
运行
AI代码解释
复制
mySvg.selectAll("circle")
                .data(scope.nodes)
                .enter()
                .append("circle")
                .attr("tooltip-append-to-body", true)
                .attr("tooltip", function(d){
                    return d.name;
                })
                .call(function(){
                    $compile(this[0].parentNode)(scope);
                });

这是一个柱塞

我认为用角度ngRepeat而不是d3生成元素的想法与框架背道而驰。D3不希望得到一堆元素。它希望得到数据--几乎总是一个数组。然后,它拥有一堆优秀的函数,可以将数据转换为各种SVG或HTML元素。让它这么做吧。

从这句话看来..。

D3使添加元素并将每个元素绑定到它所表示的数据变得非常简单,但图形可视化只是一个大得多的应用程序的一部分:我需要创建不同类型的元素,它们代表应用程序不同部分中的相同节点和边缘( D3与此无关),我希望将所有这些元素绑定到一个数据集中。

..。您的意思是用d3生成元素会在某种程度上阻止您将相同的数据绑定到应用程序的不同部分。我不明白为什么。让d3从作用域数组生成元素(就像在链接柱塞中所做的那样)。然后以通常的角度方式在任何地方使用相同的数据集。应用程序的其他部分可以更新数据集,$watch回调可以重新呈现d3图形。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23231587

复制
相关文章
我到底应该信gdb,还是cout?
是cout赢了,因为程序确实崩了。。。 其实我希望是gdb赢的。。。
看、未来
2021/10/25
2410
我到底应该信gdb,还是cout?
跨平台的ide使用-codeblock
全局变量设置 配置编译器 配置编译器,确保编译器下面包含的文件都能找到 编译配置 添加include头文件
sofu456
2021/12/06
5900
跨平台的ide使用-codeblock
曾经是“杀手级”桌面语言,Java桌面开发为何走向衰落?
Java 不适合编写桌面应用,这是事实还是偏见? 本文作者以个人视角对 Java 桌面发展历程做了回顾,内容来自他在上世纪九十年代后期担任 Java 开发者时的所见所感,主要讲述曾经的“杀手级”桌面语言 Java 是为何从 21 世纪开始颓势尽显、步入衰落的。值得一提的是,作者如今在做一款开发者友好型 Java 桌面部署工具(jDeploy),其实他还是希望 Java 可以重拾风采,再度变得对桌面开发具有吸引力。
深度学习与Python
2022/03/23
1.7K0
在制作跨平台的 NuGet 工具包时,如何将工具(exe/dll)的所有依赖一并放入包中
2018-07-03 13:30
walterlv
2018/09/18
2.9K0
使用@NotBlank应该添加什么依赖[通俗易懂]
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说使用@NotBlank应该添加什么依赖[通俗易懂],希望能够帮助大家进步!!!
Java架构师必看
2022/09/12
1.5K0
如何创建一个基于 MSBuild Task 的跨平台的 NuGet 工具包
发布于 2018-05-11 16:04 更新于 2018-09-01 00:07
walterlv
2018/09/18
1.4K0
如何创建一个基于 MSBuild Task 的跨平台的 NuGet 工具包
现代移动开发哪家强:原生还是跨平台?JetBrains 专家:我选 Flutter
本文整理自 QCon Plus 演讲,Sebastiano Poggi 是 JetBrains 的开发专家,这次演讲他主要讨论了在原生和跨平台移动开发之间进行选择所需的技术知识和工具。
深度学习与Python
2023/08/09
5540
现代移动开发哪家强:原生还是跨平台?JetBrains 专家:我选 Flutter
使用python创建跨平台的fork()炸弹
进程炸弹运行截图 这是一个用python实现的最简单的fork炸弹 import os while True: os.fuck() 但是对于windows系统,是没有fork函数的,幸运的是,python提供了multiprocessing实现了跨平台的方法,对线程进行操作 以下程序仅供学习之用,为避免对系统的造成损伤,已经进行了延时处理 from multiprocessing import Process import os import time G_boom_num = 1
zhaoolee
2018/04/19
1.6K0
使用python创建跨平台的fork()炸弹
使用 unplugin 编写跨平台的构建插件
今天继续来聊一下怎么编写‘跨平台’的构建插件,前端构建工具一直都是一个比较卷的赛道,毕竟它是前端工程化的重要一环,此时此刻它正在经历着新一轮的变革 —— 使用系统编程语言(如 Rust、Go) 重构。
_sx_
2023/10/23
9010
使用 unplugin 编写跨平台的构建插件
win10使用脚本批量下载本机python依赖包
忽略版本:打开denpend.txt把版本号和空格去掉 指定版本:使用python脚本
静谧星空TEL
2021/04/27
7770
win10使用脚本批量下载本机python依赖包
Golang交叉编译(跨平台编译)的使用
存在交叉编译的情况时,cgo 工具是不可用的。在标准 go 命令的上下文环境中,交叉编译意味着程序构建环境的目标计算架构的标识与程序运行环境的目标计算架构的标识不同,或者程序构建环境的目标操作系统的标识与程序运行环境的目标操作系统的标识不同
微客鸟窝
2022/05/24
4.2K0
开源跨平台移动项目Ngui【入门】
这是一个GUI的排版显示引擎和跨平台的GUI应用程序开发框架,基于NodeJS/OpenGL,这也是第一个在移动端Android/iOS融合NodeJS的前端GUI项目,至此JavaScript成为了真正意义上前后端通吃的语言。
IMWeb前端团队
2019/12/03
9190
开源跨平台移动项目Ngui【入门】
开源跨平台移动项目Ngui【入门】
摘要总结:本文主要介绍了一个基于Node.js的跨平台GUI工具包Ngui,包括其设计初衷,基本架构和主要特性。Ngui旨在开发人员能够编写一次代码,并在多种操作系统和平台上运行,同时能够利用标准浏览器引擎进行渲染。Ngui提供了丰富的组件和工具,方便开发人员快速构建跨平台应用,同时提供了强大的热更新机制。
IMWeb前端团队
2017/12/29
1.2K0
开源跨平台移动项目Ngui【入门】
如何创建一个基于命令行工具的跨平台的 NuGet 工具包
发布于 2018-05-12 01:09 更新于 2018-09-01 00:16
walterlv
2018/09/18
1K0
如何创建一个基于命令行工具的跨平台的 NuGet 工具包
ucgui在windows上的移植,及为go语言打造简易跨平台GUI的想法
go语言缺乏官方GUI的支持,这点有时候很不方便。 虽然网上有很多开源的实现,但都不太满意,不太好用。 网上开源的有哪些?参见《2019,Go GUI项目爆发的一年?》https://studygol
杨永贞
2020/08/04
1.2K0
使用MonoDevelop开发跨平台的应用程序
Mono®项目在3月31日发布了Mono2.4和MonoDevelop 2.0版本,2009年6月3日Lluis 在博客上宣布了MonoDevelop是一个完全跨平台的IDE。Mono计划的主管Miguel de Icaza也在博客上介绍了MonoDevelop 2.2版本。 在 2003 年后期,部分Mono社区的开发者开始移植SharpDevelop到 Linux 上(SharpDevelop是个成功的 .NET 开发源代码的集成开发环境),将原本以 System.Windows.Forms 为基础的代
张善友
2018/01/22
1.6K0
使用MonoDevelop开发跨平台的应用程序
.NET平台下的跨平台探索
三年之前投稿的azure云服务使用经验,记录一下,如今的微软和Azure已不是过去的微软和Azure了
needrunning
2019/07/04
7430
HTML5崛起之时,Java桌面时代就已经终结了
2004 年 Google Maps 的面世标志着 Java 桌面时代的终结,也改变了桌面环境下“跨平台”的基本定义。
深度学习与Python
2022/04/19
8110
ChainForge:衡量Prompt性能和模型稳健性的GUI工具包
ChainForge是一个用于构建评估逻辑来衡量模型选择,提示模板和执行生成过程的GUI工具包。ChainForge可以安装在本地,也可以从chrome浏览器运行。
deephub
2023/10/06
2810
ChainForge:衡量Prompt性能和模型稳健性的GUI工具包
点击加载更多

相似问题

跨平台开发-使用跨平台的UI工具包,还是多个平台上的本机?

80

跨平台GUI语言/工具包

80

如何编写跨平台的GUI工具包?

10

Python是否有一个跨平台GUI工具包,使用本机小部件?

48

开始Android开发:本机还是跨平台?

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文