使用tc-angular-chartjs我可以让饼图起作用,但是无法弄清楚如何将标签值相加以便正确显示。此外,我可以使用他们的示例获取条形图,但不能通过ajax调用获取外部数据。
注意:我对angularjs和javascript都很陌生,所以我可能会在这里错过一些简单的东西,但是我一直试图想出这几天没有运气。
饼图示例: 我正在使用工厂和restangular来获取外部数据,这是有效的。
问题#1
为了计算元素值,我尝试了几个参考文献,但是没有运气试图合并到图表中。 这是我尝试过的参考资料之一。其中大多数是我见过的差异:occurrence of array elements
图表的代码段
public List<Contact> getContacts() {
MyLog.i("Getting contacts...");
List<Contact> returnList = new ArrayList<>();
ContentResolver cr = context.getContentResolver();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
if (cur.getCount() > 0) {
while (cur.moveToNext()) {
String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
//FREEZES HERE
Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", new String[]{id}, null);
while (pCur.moveToNext()) {
String phoneNo = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
Contact contact = new Contact(name, returnOnlyNumbers(phoneNo));
returnList.add(contact);
//MyLog.i(contact);
}
pCur.close();
}
}
}
数据输出示例:
services.forEach(function(service) {
data.push({
'value': incident.service.name.length, // Need to calculate sum of each 'label: service' element. [Used .length to get test value]
'color': colors.getRandom(), // This works, but need colors to be same for ea. service name
'highlight': 'brown',
'label': incident.service.name
});
$scope.data = data;
//console.log($scope.data);
});
HTML:
Array[65]
0: Object
color: "orange"
highlight: "brown"
label: "Service1"
value: 36
__proto__: Object
1: Object
color: "navy"
highlight: "brown"
label: "Service1"
value: 40
__proto__: Object
2: Object
color: "green"
highlight: "brown"
label: "Service2"
value: 40
3: Object
color: "blue"
highlight: "brown"
label: "Service3"
value: 20
etc ..
条形图仅适用于其网站上的示例。
问题#2 - 我将进一步调查此问题
尝试以下我得到:TypeError:无法读取属性&#39;长度&#39;未定义的
代码段:
// Chart.js数据
<div class="chart" ng-controller="chartController" style="margin-top:20px;">
<canvas tc-chartjs-pie chart-options="options" chart-data="data" auto-legend></canvas>
</div>
答案 0 :(得分:1)
我没有足够的代表添加评论,所以我把它放在答案中
变量incident
的值是多少?它是来自异步服务,是硬编码还是来自同步计算?
我会在循环之前打印出incident
的值,这样你就可以了解循环之前的内容。
另外,forEach中service
的结构是什么?您有可能在循环中将其用作incident[service].name
吗?
答案 1 :(得分:0)
如果我了解您正在尝试做的事情,那么您需要做的就是:
incident[service].name.length
然而,我可能误解了你的问题。如果是这样,请告诉我。
答案 2 :(得分:0)
在开始处理之前,您可能还没有数据。因此,如果您使用ajax进行检索,请确保在开始forEach循环之前存在数据。