我有一个网络应用程序,它对值进行一些求和,然后应该在饼图中绘制这些值,我对此图表的图例颜色有一些问题。
总结:
在迭代了许多对所述总和有贡献的不同对象之后,总和将附加到类别数组中的每个对象:
// 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
});
});
});
};
看法:
我的观点是我正在制作两个饼图: 一个饼图的数量:从一开始就是每个类别的属性。
如上所述,每个类别的费用总和的饼图。我必须等待求和完成,否则我的总和可能未定义,因此我添加了一个 ng-if 以确保已附加最后一个总和(参见下面的代码,第二张图表)。
<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 延迟图表的渲染
但是,无论是否在第二个饼图上使用 ng-if,图例在第二个图表上都是黑色的。即使我添加自己的颜色函数来设置legendColor,我的第二个图表也失败了。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 添加到我的第一个图表中,它也无法为我的图例着色:
有没有人有过类似的经历,或者只是碰巧知道发生了什么?