在Angular嵌套UI网格中集成Sparkline高图

时间:2017-02-06 12:52:09

标签: angularjs highcharts angular-ui-grid ui-grid

我正在尝试将spark line high chart整合到Angularjs nested UI grid中。我在UI网格中的行展开事件中实现了Highcharts.SparkLine函数。在Angular UiGrid中是否有像rowExpandComplete这样的函数?

gridApi.expandable.on.rowExpandedStateChanged($scope, function (row) {
    if (row.isExpanded) {
       var str = "10,12,45,34";
        $scope.template = "<table id='table-sparkline'><tbody id='tbody-sparkline'><tr><td data-sparkline=" + str + "> </td> </tr> </tbody></table>";
        row.entity.subGridOptions = {
            columnDefs: [
                { name: 'name' },
                { name: 'gender', cellTemplate: $scope.template },
                { name: 'company' }
            ]
        };

        $http.get('https://cdn.rawgit.com/angular-ui/ui-grid.info/gh-pages/data/100.json')
            .success(function (data) {
                row.entity.subGridOptions.data = data;

                /**
                 * Create a constructor for sparklines that takes some sensible defaults and merges in the individual
                 * chart options. This function is also available from the jQuery plugin as $(element).highcharts('SparkLine').
                 */
                Highcharts.SparkLine = function (a, b, c) {
                    var hasRenderToArg = typeof a === 'string' || a.nodeName,
                        options = arguments[hasRenderToArg ? 1 : 0],
                        defaultOptions = {
                            chart: {
                                renderTo: (options.chart && options.chart.renderTo) || this,
                                backgroundColor: null,
                                borderWidth: 0,
                                type: 'area',
                                margin: [2, 0, 2, 0],
                                width: 120,
                                height: 20,
                                style: {
                                    overflow: 'visible'
                                },

                                // small optimalization, saves 1-2 ms each sparkline
                                skipClone: true
                            },
                            title: {
                                text: ''
                            },
                            credits: {
                                enabled: false
                            },
                            xAxis: {
                                labels: {
                                    enabled: false
                                },
                                title: {
                                    text: null
                                },
                                startOnTick: false,
                                endOnTick: false,
                                tickPositions: []
                            },
                            yAxis: {
                                endOnTick: false,
                                startOnTick: false,
                                labels: {
                                    enabled: false
                                },
                                title: {
                                    text: null
                                },
                                tickPositions: [0]
                            },
                            legend: {
                                enabled: false
                            },
                            tooltip: {
                                backgroundColor: null,
                                borderWidth: 0,
                                shadow: false,
                                useHTML: true,
                                hideDelay: 0,
                                shared: true,
                                padding: 0,
                                positioner: function (w, h, point) {
                                    return { x: point.plotX - w / 2, y: point.plotY - h };
                                }
                            },
                            plotOptions: {
                                series: {
                                    animation: false,
                                    lineWidth: 1,
                                    shadow: false,
                                    states: {
                                        hover: {
                                            lineWidth: 1
                                        }
                                    },
                                    marker: {
                                        radius: 1,
                                        states: {
                                            hover: {
                                                radius: 2
                                            }
                                        }
                                    },
                                    fillOpacity: 0.25
                                },
                                column: {
                                    negativeColor: '#910000',
                                    borderColor: 'silver'
                                }
                            }
                        };

                    options = Highcharts.merge(defaultOptions, options);

                    return hasRenderToArg ?
                        new Highcharts.Chart(a, options, c) :
                        new Highcharts.Chart(options, b);
                };

                var start = +new Date(),
                    $tds = $('td[data-sparkline]'),
                    fullLen = $tds.length,
                    n = 0;

                // Creating 153 sparkline charts is quite fast in modern browsers, but IE8 and mobile
                // can take some seconds, so we split the input into chunks and apply them in timeouts
                // in order avoid locking up the browser process and allow interaction.
                function doChunk() {
                    var time = +new Date(),
                        i,
                        len = $tds.length,
                        $td,
                        stringdata,
                        arr,
                        data,
                        chart;

                    for (i = 0; i < len; i += 1) {
                        $td = $($tds[i]);
                        stringdata = $td.data('sparkline');
                        arr = stringdata.split('; ');
                        data = $.map(arr[0].split(', '), parseFloat);
                        chart = {};

                        if (arr[1]) {
                            chart.type = arr[1];
                        }
                        $td.highcharts('SparkLine', {
                            series: [{
                                data: data,
                                pointStart: 1
                            }],
                            tooltip: {
                                headerFormat: '<span style="font-size: 10px">' + $td.parent().find('th').html() + ', Q{point.x}:</span><br/>',
                                pointFormat: '<b>{point.y}.000</b> USD'
                            },
                            chart: chart
                        });

                        n += 1;

                        // If the process takes too much time, run a timeout to allow interaction with the browser
                        if (new Date() - time > 500) {
                            $tds.splice(0, i + 1);
                            setTimeout(doChunk, 0);
                            break;
                        }

                        // Print a feedback on the performance
                        if (n === fullLen) {
                            $('#result').html('Generated ' + fullLen + ' sparklines in ' + (new Date() - start) + ' ms');
                        }
                    }
                }
                doChunk();

            });
    }
});

但是当我们扩展行时它只是第二次触发。任何人都可以告诉我哪里出错了。我为此创建了plunker

0 个答案:

没有答案