javascript - Angular 中的 D3 力模拟
问题描述
我正在尝试在 Angular 应用程序中进行 d3 力模拟。基本上我所拥有的是run
初始化和设置模拟选项的ticked
方法以及在每个刻度上更新模拟的方法。我有几个与此相关的问题。(JavaScript 版本的代码工作得很好)
我的初始代码是
private run() {
this.simulation = d3.forceSimulation()
//some code
this.simulation.on('tick', this.ticked())
}
private ticked() {
//code
}
这不起作用(模拟不打勾)。但是,如果我像下面这样内联ticked
方法,它会起作用并且模拟会继续。
private run() {
this.simulation = d3.forceSimulation()
//some code
this.simulation.on('tick', () => {
//code
})
}
这有什么具体原因吗?我是 Angular 和 d3 的新手,它可能很简单,就像 JavaScript 的行为方式一样。
第二个问题,之前的代码片段(第二个)工作了几秒钟,然后模拟冻结。控制台中没有错误消息。你能猜到为什么会这样吗?我希望这足够详细。如果需要,我可以添加更多详细信息。
解决方案
您所做的第一次尝试是将返回值从您的方法“打勾”传递给事件函数。
事件“on”接收两个参数,第一个是您要绑定的事件,在本例中为“tick”,以及一个在事件返回值时执行的回调函数。您传递的第二个参数是一个值,而不是回调函数。所以它在事件触发之前执行了你的函数。
您可以使用带有回调的函数“打勾”,如下所示:
this.simulation.on('tick', () => this.ticked());
推荐阅读
- clickhouse - 如何在最终查询中添加包含空数据的行?
- jenkins - Jenkins 插件 - 如何获取当前正在执行的工作?
- php - 如何使用两个查询结果只显示一次数据
- c++ - 重载 == 让类与 std::string 进行比较
- java - 如何解决 Maven cfx 构建失败?
- scala - 使用 java.io.File.mkdirs() 将文件写入目录,然后在 spark 集群模式下无法访问它
- mysql - 使用 OR 的 1 个语句中的多组查询
- mysql - MySQL 列长度最大为 1026 个字符
- javascript - 如何为右侧做一个消失的元素,这与它在左侧工作一样
- c# - 例外:“发送 HTTP 标头后服务器无法设置状态。” Controller成功返回后