Angularjs:图表的Sum数组元素

时间:2015-07-03 20:52:31

标签: javascript angularjs charts

使用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>

3 个答案:

答案 0 :(得分:1)

我没有足够的代表添加评论,所以我把它放在答案中

变量incident的值是多少?它是来自异步服务,是硬编码还是来自同步计算?

我会在循环之前打印出incident的值,这样你就可以了解循环之前的内容。

另外,forEach中service的结构是什么?您有可能在循环中将其用作incident[service].name吗?

答案 1 :(得分:0)

如果我了解您正在尝试做的事情,那么您需要做的就是:

incident[service].name.length
然而,我可能误解了你的问题。如果是这样,请告诉我。

答案 2 :(得分:0)

在开始处理之前,您可能还没有数据。因此,如果您使用ajax进行检索,请确保在开始forEach循环之前存在数据。