【问题标题】:Rendering Highcharts using Angular js Directives使用 Angular js 指令渲染 Highcharts
【发布时间】:2013-04-01 01:09:37
【问题描述】:

我是 Angular JS 的新手,并试图通过创建指令来呈现我的 highcharts(基本线)。请告诉我我应该在这里遵循的方法。任何帮助将不胜感激。

这是我的 highcharts 脚本:

<script type="text/javascript">
$(function () {
    $('#container').highcharts({
        chart: {
            type: 'line',
            marginRight: 130,
            marginBottom: 25
        },
        title: {
            text: 'Monthly Average Temperature',
            x: -20 //center
        },
        subtitle: {
            text: 'Source: WorldClimate.com',
            x: -20
        },
        xAxis: {
            categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
                'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
        },
        yAxis: {
            title: {
                text: 'Temperature (°C)'
            },
            plotLines: [{
                value: 0,
                width: 1,
                color: '#808080'
            }]
        },
        tooltip: {
            valueSuffix: '°C'
        },
        legend: {
            layout: 'vertical',
            align: 'right',
            verticalAlign: 'top',
            x: -10,
            y: 100,
            borderWidth: 0
        },
        series: [{
            name: 'Tokyo',
            data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6]
        }, {
            name: 'New York',
            data: [-0.2, 0.8, 5.7, 11.3, 17.0, 22.0, 24.8, 24.1, 20.1, 14.1, 8.6, 2.5]
        }, {
            name: 'Berlin',
            data: [-0.9, 0.6, 3.5, 8.4, 13.5, 17.0, 18.6, 17.9, 14.3, 9.0, 3.9, 1.0]
        }, {
            name: 'London',
            data: [3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8]
        }]
    });
});


    </script>

【问题讨论】:

标签: angularjs highcharts


【解决方案1】:

饼图示例:

http://jsfiddle.net/csTzc/

    function MyCtrl($scope, limitToFilter) {
  $scope.ideas = [
    ['ideas1', 1],
    ['ideas2', 8],
    ['ideas3', 5]
  ];

  $scope.limitedIdeas = limitToFilter($scope.ideas, 2);
}

angular.module('myApp', [])
  .directive('hcPie', function () {
  return {
    restrict: 'C',
    replace: true,
    scope: {
      items: '='
    },
    controller: function ($scope, $element, $attrs) {
      console.log(2);

    },
    template: '<div id="container" style="margin: 0 auto">not working</div>',
    link: function (scope, element, attrs) {
      console.log(3);
      var chart = new Highcharts.Chart(options);
      scope.$watch("items", function (newValue) {
        chart.series[0].setData(newValue, true);
      }, true);

    }
  }
});

【讨论】:

  • 这很好,但如果您不断添加和删除系列怎么办?您是否必须使用 HighCharts API 重写它们并在 $watch 函数中手动从图表中插入和删除系列?
  • 几乎完美。我唯一遇到的是 rederTo Id 部分,这使得该指令无法重用。有没有办法从控制器传递一个可以绑定到模板的 id?我已经和它战斗了一个小时了..
  • @jwimmer 通常你有一个模板返回 div 和这个 id,但是如果你摆脱它,你可以使用这样的东西:jsfiddle.net/csTzc/310
  • 老兄,你真是个天才。谢谢!
  • 问题出在控制器上,因为简单的演示效果很好。 jsfiddle.net/csTzc/533
【解决方案2】:

此处的替代实现:http://jsfiddle.net/pablojim/Cp73s/

这里使用https://github.com/pablojim/highcharts-ng

这允许您使用以下 html 创建一个高图:

<highchart id="chart1" series="chart.series" title="chart.title" options="chart.options"></highchart>

在上述情况下,chart.series 是一个 javascript 对象数组,表示图表上的系列 - 这些采用标准的 Highcharts 选项。然后 angularjs 会观察这些内容是否有任何变化。

chart.options 是 highcharts 初始化选项 - 也关注变化。尽管对此进行更改会重新创建整个图表。

chart.title 是 highcharts 标题对象 - 也观察变化。

【讨论】:

  • everythis 都很好,但 jsfiddle 示例由于缺少配置而无法正常工作,我花了一段时间才弄清楚这一点。正确的 usgae 低于
  • 嗨,如何将这个角度高图转换为二进制图像,你能帮忙吗,我收到一些错误stackoverflow.com/questions/19245398/…
  • highcharts-ng 很棒,但我正在使用 highmaps,它看起来目前不受支持... :(
  • @ShawnStrickland,快速浏览一下highcharts-ng forks 发现两个用户添加了 Highmaps 支持。查看herehere 了解更多信息。
  • 现在支持高图!
【解决方案3】:

app.directive('hcChart', function () {
	return {
			restrict: 'A',
			template: '<div></div>',
			scope: {
					options: '='
				},
			link: function (scope , element, attribute) {
                Highcharts.chart('chart', {
                	 chartOptions: {
                         type: 'line'
                    },
                     
                     title: {
                        text: 'Temperature data'
                     },
                 series: [{
                        data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]
                     }]
                });
			}
	}
			
});
&lt;div id="chart" hc-chart&gt;Placeholder for generic chart&lt;/div&gt;
确保在 index.html 中添加了 highchart 库

【讨论】:

    猜你喜欢
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 2014-06-27
    • 2015-05-11
    • 2013-03-18
    • 2022-01-09
    • 2017-06-25
    • 1970-01-01
    相关资源
    最近更新 更多