美文网首页Web前端之路让前端飞
D3.js结合Angular.js制作图表

D3.js结合Angular.js制作图表

作者: Evelynzzz | 来源:发表于2017-08-12 18:15 被阅读647次

Angular中使用D3制作图表,我们可以根据图表的种类创建不同的指令和对应的服务。比如创建一个柱状图时,我们在模块下创建一个barChart指令:

myComponents.directive('barChart', function($compile) {
    'use strict';

    return {
        restrict: 'AE',
        scope: {
            chartTitle: "@",        //图表标题
            series: "=",            //图标的数据
            height: "=?height"      //图表的高度
        },
        controller: function(initBarChart, $scope, $element, $attrs) {
            $scope.height = $scope.height || 200;   //如果高度未定义,则使用默认值200

            var _chart = initBarChart($scope);      //使用服务

            var _chartBody = $element.find(".chart-body");  //获取图表的容器
            _chartBody.height($scope.height);       //设置容器的高度

            _chart.generate($element.find(".chart-body"), $scope.series, {      //使用服务提供的方法生成图表
                height: $scope.height,
            });

            //Do something here...
            
        },
        template: '<div class="chart">' + '<div class="chart-header">' + '<h3>{{chartTitle}}</h3>' + 
                    '</div>' + '<div class="chart-body">' + '</div>' + '</div>',
        replace: true
    };
});

对应的initBarChart服务:

myComponents.service('initBarChart', function() {
    'use strict';

    var charts = function($scope) {
        return {
            generate: function(ele, series, config) {
                ele = $(ele);
                series = series || [];
                config = config || {};
                
                 d3.select(id).selectAll('.svg_barchart').remove();
                //添加svg元素
                var svg = d3.select(id).append("svg")
                    .attr('class', 'svg_barchart')
                //Do something here...
            },
        };
    return charts;
});

我们只需要把D3制作柱状图的关键代码放到generate方法中就可以了。

在页面中使用这个指令:

<div bar-chart height="300" chart-title="操作次数"  data-series="operationSeries"></div>

然后在作用范围包含这个节点的$scope中定义变量operationSeries,用于传递图表中要显示的数据或者配置参数。

监听图表数据的变化

使用Ajax获取数据并进行处理后,发现图表显示不出来。在Chrome的ng-inspect插件中看到$scope.series是有数据的,但是图表中获取不到这个series的值。后来想到可能是图表绘制的时候,series的数据还没有处理好。

于是决定在指令对应的控制器中,使用$watch监听series变量的变化:

//检测数据变化,更新图表 
$scope.$watch('series', function(newData, oldData){
    if(!angular.equals(newData,oldData)){
       _chart.generate($element.find(".chart-body"), newData, {
            height: $scope.height,
        });
    }
}, true); 

相关文章

  • D3.js结合Angular.js制作图表

    在Angular中使用D3制作图表,我们可以根据图表的种类创建不同的指令和对应的服务。比如创建一个柱状图时,我们在...

  • d3.js制作蜂巢图表带动画效果

    以上是效果图,本图表使用d3.js v4制作。图表主要功能是在六边形格子中显示数据,点击底部图标可以切换指定格子...

  • D3.js制作图表

    D3是用于数据可视化的Javascript库。使用SVG,Canvas和HTML。结合强大的可视化技术和数据驱动的...

  • 在Vue中获取DOM元素的实际宽高

    最近使用 D3.js 开发可视化图表,因为移动端做了 rem 适配,所以需要动态计算获取图表容器的宽高,其中涉及到...

  • Chartistic - 操作简单且免费的数据可视化图表生成工具

    一款简单轻量的图表制作 App,简单操作就能得到专业美观的图表,满足日常图表制作需求。 轻量的图表制作 App C...

  • E战到底—动态图表的制作

    E战到底—动态图表的制作 图表——3分钟学会制作Vlookup动态图表 为什么要学习动态图表?因为相比普通类图表,...

  • 21-19 图表---专业与创意

    一、图表秀 上下、恰当、全面 二、图表的制作过程 原始资料→提炼信息→选择图表→制作图表 1)分析数据 2)确定关...

  • 参考文献:React 与 D3

    Elija Meeks (author of D3.js in Action) 1 D3 与 React 的结合 ...

  • E战到底第10期-Day26

    今天学习内容是动态图表的制作,主要有双坐标图表的制作及动态图表制作的2个案例2种方法。双坐标图表制作较简单且经常使...

  • 动态图表的制作

    相比常规图表,动态图表更有利于数据的展示,下面来学习动态图表的制作。 一、使用Vlookup函数来制作动态图表 1...

网友评论

    本文标题:D3.js结合Angular.js制作图表

    本文链接:https://www.haomeiwen.com/subject/urpjrxtx.html