Using AngularJS 1.x

This tutorial will show you every step you need to use amCharts 4 with AngularJS 1.x.

VERSION INFO If you are using Angular2 or later, please refer to this tutorial instead.

First, create an index.html file:

<!DOCTYPE HTML>
<html ng-app="app">
  <head>
    <!-- Loads amCharts 4 -->
    <script src="https://www.amcharts.com/lib/4/core.js"></script>
    <script src="https://www.amcharts.com/lib/4/charts.js"></script>
    <script src="https://www.amcharts.com/lib/4/themes/animated.js"></script>

    <!-- Loads AngularJS -->
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.7.5/angular.min.js"></script>

    <!-- Loads our app code -->
    <script src="chart.js"></script>
    <script src="app.js"></script>
  </head>
  <body>
    <!-- Displays the chart component -->
    <chart style="width: 100%; height: 500px"></chart>
  </body>
</html>

Now create a chart.js file:

am4core.useTheme(am4themes_animated);

angular.module("chart", [])
  .directive("chart", function () {
    return {
      restrict: "E",
      scope: {},
      template: "<div id='chartdiv'></div>",
      replace: true,
      link: function ($scope) {
        var chart = am4core.create("chartdiv", am4charts.XYChart);

        chart.paddingRight = 20;

        var data = [];
        var visits = 10;
        for (var i = 1; i < 366; i++) {
          visits += Math.round((Math.random() < 0.5 ? 1 : -1) * Math.random() * 10);
          data.push({ date: new Date(2018, 0, i), name: "name" + i, value: visits });
        }

        chart.data = data;

        var dateAxis = chart.xAxes.push(new am4charts.DateAxis());
        dateAxis.renderer.grid.template.location = 0;

        var valueAxis = chart.yAxes.push(new am4charts.ValueAxis());
        valueAxis.tooltip.disabled = true;
        valueAxis.renderer.minWidth = 35;

        var series = chart.series.push(new am4charts.LineSeries());
        series.dataFields.dateX = "date";
        series.dataFields.valueY = "value";

        series.tooltipText = "{valueY.value}";
        chart.cursor = new am4charts.XYCursor();

        var scrollbarX = new am4charts.XYChartScrollbar();
        scrollbarX.series.push(series);
        chart.scrollbarX = scrollbarX;

        $scope.$on("$destroy", function () {
          chart.dispose();
        });
      }
    };
  });

This contains all of the chart code. It is important to use $scope.$on("$destroy", ...) to dispose the chart (as shown above).

Lastly, make an app.js file:

angular.module("app", ["chart"]);

Notice that the app module imports the chart module.

Now you can open the index.html file in a browser, and it should work!