C3图表在角度指令中调整大小

时间:2015-12-15 16:51:15

标签: javascript angularjs c3.js

我目前有一个简单的圆环图,我用C3创建。我把它放在一个指令中,一切正常。

我的指示如下:

angular.module('dashboardApp').directive('donutChart',function(){       

    function link(scope,element,attr){      


        scope.$watch(function() {

            return scope.data;
         },
            function() {                    
                if(scope.data !== undefined){                       

                    var chart  = c3.generate({
                        bindto: 'donut-chart',
                        data:{
                            columns : scope.data,                           
                            type: 'donut'
                            },
                        donut:{
                            label : {
                                format: function(value,ratio,id){
                                    return value;
                                },

                            }
                        },
                        tooltip:{
                                position: function(data,width,height,element){
                                    return {top:-180,left:300}
                                }
                            },                      
                    }); 
                }       
            }
        )};         

    return {
        restrict: 'EA',         
        scope: {
            data: '='       

        },
        link : link
    };
});

在HTML中我有以下内容:

<div class="row">
    <div class="donut-route" >
        <donut-chart  data='routes'></donut-chart>
    </div>
</div>

我的目标是让甜甜圈在其目前所在的div中重新调整大小。

我知道C3调整大小,我可以传递值,也许我可以将窗口大小添加到 $ scope.watch 并每次调整大小但我不确定是否会太沉重。从阅读文档中我认为C3图表会自动重新调整大小,但由于它在指令中我认为它受到限制。

非常感谢任何指示或建议。

1 个答案:

答案 0 :(得分:3)

我将您的代码置于工作Plunker中以便调查问题。

由于生成的图表是 SVG 对象,因此CSS自动调整大小的方法很棘手。不过我的建议是探讨以下帖子:

https://css-tricks.com/scale-svg/

Stackoverflow

上的这个问题

所以我认为更有效的方法(如你所说)是在generate上使用size选项:

   var chart = c3.generate({
        size: {
          height: 200,
          width: 200
        }...

并调整C3 API的方法以更新大小:

  chart.resize({height:100, width:300})