0

我正在使用 D3.js 进行圆环图可视化。我创建了一个指令myWheel,并在链接函数中$watch更改了-elementval上的属性。<my-wheel>

每次数据更新时,可视化都应该使用转换进行更新,这可以正常工作,但第一次转换会被忽略。看到这个笨蛋

如果我延迟(延迟$timeout)数据的第一次更新,则会触发转换。

关于问题出在哪里的任何想法?

4

1 回答 1

1

在创建路径时,您可以selection.each调用donutDataSlice该集合this._current到基准的输入选择。这意味着当你进入arcDataTween第一次时,this._currenta值都是一样的。所以插值器第一次没有做任何事情。

还有其他几个问题。在arcDataTween你有这个:

function arcDataTween(a) {
    var i = d3.interpolate(this._current, a);
    this._current = i(0);
    return function(t) {
        return arcData(i(t));
    };
}

您正在this._current用作插值器的起始值,但随后您正在设置this._current = i(0). 使用 0 调用插值器将返回起始值,因此this._current每次运行 arcDataTween 时基本上都设置为相同的值。您可能想要的是设置this_current = a(或等效地,this._current = i(1))。

作为关于命名约定的一个小说明,自定义补间中的第一个参数实际上是基准,因此通常用 表示d。使用a它可能会造成混淆,因为第三个参数是元素的当前属性或样式值,通常表示为a(例如function arcDataTween(d, i, a) {})。

最后,您的初始数据的 ascore为零,并且由于您将score其用作饼图布局的值,因此在某些情况下,这将为 startAngle 和 endAngle 返回 NaN。我不确定这在视觉上会产生什么影响,但这可能不是您想要的。饼图布局的值访问器应始终返回一个数字,该数字表示该段所代表的饼图的比例。在计算段值之前过滤掉分数为 0 的数据可能会更好,以避免出现 NaN 角。

于 2013-10-15T19:04:38.090 回答