【发布时间】:2020-02-17 11:58:24
【问题描述】:
我正在尝试在 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 的行为方式一样。
第二个问题,之前的代码 sn-p(第二个)工作了几秒钟,然后模拟冻结。控制台中没有错误消息。你能猜到为什么会这样吗? 我希望这足够详细。如果需要,我可以添加更多详细信息。
【问题讨论】:
-
this.ticked()将立即执行函数,表达式将计算为函数的返回值。你想传递函数本身,而不是:this.simulation.on('tick', this.ticked)(不是缺少的括号),它基本上等同于已经工作的内联版本。 -
是的,这是有道理的。感谢您缺少括号位。很简单,现在问这个问题我觉得很愚蠢。您知道为什么模拟会在一段时间后停止。
标签: javascript angular d3.js