値の合計を行い、これらの値を円グラフにプロットすることになっている Web アプリがあります。このグラフの凡例の色に関していくつかの問題があります。
合計:
合計は、その合計に寄与する多くの異なるオブジェクトを反復した後、categorys 配列内の各オブジェクトに添付されます。
// Find a list of Categories
$scope.find = function() {
var that = this;
Categories.query().$promise.then(function(categories){
that.categories=categories;
categories.forEach(function(category){
getExpensesForCategory(category._id, 8).then(function(cashflows){
category.sum = getTotalCashflowSum(cashflows); //<- sum is attached
});
});
});
};
意見:
私は、2 つの円グラフを作成していると考えています。
上記のように、各カテゴリの費用の合計の 1 つの円グラフ。合計が完了するまで待つ必要があります。そうしないと、合計が未定義になる可能性があるため、ng-if を追加して、最後の合計が追加されていることを確認します (以下のコード、2 番目のグラフを参照)。
<div class=" well" style="text-align: center" >
<div class="pie-group" >
<h3>Budget distribution:</h3>
<nvd3-pie-chart
data="categories"
id="budgetPie"
width="350"
height="350"
x="xBudget()"
y="yBudget()"
showLegend="true"
color="colorFunction()"
legendColor="colorFunction()"
>
<svg height="250"></svg>
</nvd3-pie-chart>
</div>
<div class="pie-group" data-ng-if="categories[categories.length-1].sum!==undefined">
<h3>Actual consumption:</h3>
<nvd3-pie-chart
data="categories"
id="consumptionPie"
width="350"
height="350"
x="xConsumption()"
y="yConsumption()"
showLegend="true"
color="colorFunction()"
legendColor="colorFunction()"
>
<svg height="250"></svg>
</nvd3-pie-chart>
</div>
</div>
レンダリング前に合計が完了していません: 未定義の値
ng-if を削除すると、円グラフの一部のカテゴリの合計属性が未定義になるようです。これにより、円グラフが適切にレンダリングされなくなります。これは、チャートのレンダリング時に合計が完了していないためだと思います。
チャートのレンダリングを遅らせるNG-IF
ただし、2 番目の円グラフで ng-if の有無にかかわらず、凡例は 2 番目のグラフですべて黒くなります。独自のカラー関数を追加して legendColor を設定しても、2 番目のチャートでは失敗します。legendColor="colorFunction()"
. ただし、チャートはレンダリングされ、凡例のみが黒になります。
チャートをセットアップするためにビューから呼び出しているメソッドは次のとおりです。
$scope.xBudget = function(){ return function(d) { return d.name+': '+d.amount ; }; };
$scope.xConsumption = function(){
return function(d) {
return d.name+': '+d.sum ;
};
};
$scope.yBudget = function(){
return function(d){
return d.amount;
};
};
$scope.yConsumption = function(){
return function(d){
return d.sum;
};
};
var colorArray = ['#FF0000', '#0000FF', '#FFFF00', '#00FFFF'];
$scope.colorFunction = function() {
return function(d, i) {
return colorArray[i];
};
};
最初のチャートに ng-if を追加すると、凡例の色付けにも失敗します:
誰かが同様の経験をしたことがありますか、それともたまたま何が起こっているのか考えていますか?