我正在使用D3.js進行圓環圖可視化。我創建了一個指令myWheel
,並在鏈接函數I $watch
上更改<my-wheel>
元素的屬性val
。AngularJS + D3:忽略第一個轉換
每次數據更新時,可視化都應該用一個轉換進行更新,該轉換很好,但第一次轉換被忽略。見this plunker。
如果我延遲(通過$timeout
)數據的第一次更新過渡被觸發。
問題出在哪裏的任何想法?
我正在使用D3.js進行圓環圖可視化。我創建了一個指令myWheel
,並在鏈接函數I $watch
上更改<my-wheel>
元素的屬性val
。AngularJS + D3:忽略第一個轉換
每次數據更新時,可視化都應該用一個轉換進行更新,該轉換很好,但第一次轉換被忽略。見this plunker。
如果我延遲(通過$timeout
)數據的第一次更新過渡被觸發。
問題出在哪裏的任何想法?
您有一個selection.each
呼叫輸入選擇donutDataSlice
設置this._current
作爲路徑創建的基準。這意味着當您第一次進入arcDataTween
時,this._current
和a
的值相同。所以內插器在第一次通過時不會做任何事情。
還有一些其他問題。在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調用插補器將返回起始值,所以在每次arcDataTween運行時,您都必須將this._current
設置爲相同的值。您可能需要的是設置this_current = a
(或等同於this._current = i(1)
)。
作爲關於命名約定的小記錄,自定義補間中的第一個參數實際上是通常用d
表示的數據。使用a
可能會造成混淆,因爲第三個參數是元素的當前屬性或樣式值,通常表示爲a
(例如function arcDataTween(d, i, a) {}
)。
最後,您的初始數據爲score
爲零,並且由於您使用的是score
作爲餅圖佈局的值,因此在某些情況下此操作會返回NaN作爲startAngle和endAngle。我不確定這有什麼影響,但它可能不是你想要的。餅圖佈局的值存取器應始終返回一個數字,表示該段所表示的餅圖的比例。在計算分段值以避免NaN角度之前,最好過濾掉分數爲0的數據。
''this._current'和'a'之間進行插值時,謝謝Scott。我已更新[http://plnkr.co/edit/cDz6DLdVbX1QChb5r5kM?p=preview](plunker)。即使我在第一次迭代中有'NaN'角度,但視覺效果看起來還不錯,但我想避免這種情況,所以現在我過濾出0分的數據。但是,我無法讓圖表在'.enter ()',儘管我調整了'this._current'值以允許'arcDataTween'在兩個不同的值之間進行插值。任何想法來解決這個問題? – swenedo
您需要小心緩存interpolateObject的返回值,因爲它實際上爲每個調用使用相同的基礎對象。以下是一個包含更多詳細信息的錯誤報告:https://github.com/mbostock/d3/issues/1030。這有幫助嗎? –
我懷疑問題出在'arcDataTween'函數中。當試圖在'd3.interpolate(this._current,a);' – swenedo