Angular and D3.js – tutorial

Angular and D3.js – tutorial

Goal: use the D3.js library in an Angular project.

Here the steps to integrate the library with Angular.

In the package.json we have to declare the dependencies with d3:

``` javascript "@types/d3": "^4.4.1", "@types/d3-scale": "^1.0.6", "d3": "^4.5.0", "d3-scale": "^1.0.4",


In `vendor.ts`:
``` javascript
    // d3.js
    import 'd3/build/d3.min';
    import 'd3-scale/build/d3-scale.min';

In the component that will generate the view you have to import the d3 types:

``` javascript import as d3 from "d3"; import as d3scale from "d3-scale";


In the component we declare the style used and we reference the external xml

``` typescript
    @Component({
        selector: 'd3-example',
        templateUrl:'../html/d3.html',
        providers: [ConstantsService, Location],
        styles:[`.chart div {
        font: 10px sans-serif;
        background-color: steelblue;
        text-align: right;
        padding: 3px;
        margin: 1px;
        color: white;
        }`],
        encapsulation: ViewEncapsulation
            .None
        })

The external html simply declare the object that will be modified by the library (chart):

``` typescript

Example with D3


Your class has to implement [AfterViewInit](https://angular.io/docs/ts/latest/guide/lifecycle-hooks.html). This method is called after that Angular initialises the component's view and child views.

`export class D3Component implements OnInit, AfterViewInit`

``` typescript
    ngAfterViewInit() {
        var data = [10, 20 ,30 ,15, 4, 26, 33];
        d3.select(".chart")
            .selectAll("div")
            .data(data)
            .enter().append("div")
            .style("width", function(d) { return d*10 + "px"; })
            .text(function(d) { return d; });
    }