Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript D3角速度下的力仿真_Javascript_Angular_D3.js - Fatal编程技术网

Javascript D3角速度下的力仿真

Javascript D3角速度下的力仿真,javascript,angular,d3.js,Javascript,Angular,D3.js,我正在尝试在Angular应用程序中进行d3力模拟。基本上,我拥有的是初始化和设置模拟选项的run方法,以及在每次勾选时更新模拟的ticked方法。我有几个与此相关的问题。(JavaScript版本的代码运行良好) 我的初始代码是 private run() { this.simulation = d3.forceSimulation() //some code this.simulation.on('tick', this.ticked()) } private ticked()

我正在尝试在Angular应用程序中进行d3力模拟。基本上,我拥有的是初始化和设置模拟选项的
run
方法,以及在每次勾选时更新模拟的
ticked
方法。我有几个与此相关的问题。(JavaScript版本的代码运行良好)

我的初始代码是

private run() {
  this.simulation = d3.forceSimulation()
  //some code
  this.simulation.on('tick', this.ticked())
}

private ticked() {
  //code
}
这不起作用(模拟不勾选)。但是如果我像下面那样内联
勾选的
方法,它将工作,模拟将继续

private run() {
  this.simulation = d3.forceSimulation()
  //some code
  this.simulation.on('tick', () => {
   //code
  })
}
有没有具体的原因?我不熟悉Angular和d3,它可能很简单,就像JavaScript的行为一样

第二个问题,前面的代码片段(第二个)工作几秒钟,然后模拟冻结。控制台中没有错误消息。你能猜出这是为什么吗?
我希望这足够详细。如果需要,我可以添加更多细节

您的第一次尝试是将返回值从方法“ticked”传递给事件函数

事件“on”接收两个参数,第一个是绑定到的事件,在本例中为“tick”,以及在事件返回值时执行的回调函数。您正在作为第二个参数传递一个值,而不是回调函数。因此,它在触发事件之前执行您的函数

您可以将函数“ticked”与回调一起使用,如下所示:

this.simulation.on('tick', () => this.ticked());

this.ticked()
将立即执行函数,表达式将计算为函数的返回值。您希望传递函数本身:
this.simulation.on('tick',this.ticked)
(不是缺少的括号),这基本上等同于内联版本,它是alread working.yep,这是有意义的。谢谢你少了一点括号。很简单,现在我觉得问这个问题很愚蠢。你知道为什么模拟会在一段时间后停止吗?这是有道理的。你知道为什么模拟会在一段时间后停止吗?我以前从未使用过D3,但我发现这个链接可能回答了你的问题:谢谢@Matheus,这个问题没有直接关系,但对理解发生了什么很有用。我有一些线索,为什么它会在一段时间后停止。我将尝试进一步调查。如果我没有得到进一步的答案,我明天会把这个标记为正确答案。