Wijmo UI for the Web
Angular JS and wijcompositechart
Wijmo User Guide > AngularJS Directives > AngularJS and Chart Widgets > Angular JS and wijcompositechart

In this Angular getting started guide, you'll learn how to use the CompositeChart widget in an HTML project using HTML markup, jQuery script, and AngularJS directives.

For more complex samples that have the controller and model in separate files, see Wijmo Charts in the AngularJS Directive Gallery on our web site.

  1. To create a new HTML page in your favorite text editor, add the following code and save the document with an .html extension. Notice that the <HTML> and <body> tags are different from our usual tags.
    • The <HTML> tag is marked as an Angular app with the ng-app directive, in our script, we will specify that it uses Wijmo.
    • The <body> tag is used to define the scope of the Angular controller that we create. You can use another tag such as a <div> for the scope, but for our purposes, we will use the entire body. The ng-controller directive specifies the controller to use within this scope.

    Drop down and copy markup

    Paste in your favorite text editor.
    Copy Code
    <!DOCTYPE HTML>
    <HTML ng-app="MyApp">
    <head>
    </head>
    <body ng-controller="MyController">
    </body>
    </HTML>
    
  2. Add links to the dependencies to your HTML page within the <head> tags. Find the latest dependencies in the content delivery network (CDN) file at wijmo cdn. Along with our usual references, we add two script references for Angular that must come after the jQuery references, so they are the last two lines:
    • One is for AngularJS itself.
    • The other is for Wijmo's Angular javascript integration library.

    Drop down and copy references to paste inside the head tags

    References
    Copy Code
    <!-- jQuery -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.0/jquery-ui.min.js" type="text/javascript"></script>
    
    <!--Theme-->
    <link href="http://cdn.wijmo.com/themes/aristo/jquery-wijmo.css" rel="stylesheet" type="text/css" />
    
    <!--Wijmo Widgets CSS-->
    <link href="http://cdn.wijmo.com/jquery.wijmo-pro.all.3.20183.140.min.css" rel="stylesheet" type="text/css" />
    
    <!-- Wijmo Scripts -->
    <script src="http://cdn.wijmo.com/jquery.wijmo-open.all.3.20161.90.min.js" type="text/javascript"></script>
    <script src="http://cdn.wijmo.com/jquery.wijmo-pro.all.3.20161.90.min.js" type="text/javascript"></script>
    
    <!-- Angular -->
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.0/angular.min.js"></script>
    <script src="http://cdn.wijmo.com/interop/angular.wijmo.3.20161.90.min.js"></script>
            
  3. Within the <head> tags, below the references, add the following script to set the app to use Wijmo, and to create a model and controller.
    • We use two models:
      • One, called Region, to specify six data fields that we link to for the main chart data supplied in the controller.
      • A second, called PieData, to specify three data fields that we link to for the pie chart data supplied in the controller. In this model, we specify label, value, and offset fields, as the pie chart does not use x and y values like other charts.
    • We use a $scope parameter on the controller to control data context for the model
    • We add an optional $locale parameter on the controller.
    • We add two $scopes to the controller:
      • We add five data rows to the list scope, which supplies data for the Region model.
      • We add three data rows to the pieData scope, which supplies data for the PieData model.
    To see how this is done in jQuery without Angular, see Add Curve Fittings.
    Script
    Copy Code
    <script type="text/javascript">
        var app = angular.module("MyApp", ["wijmo"]);
        //Type class
        function Type(data) {
            this.HardwareType = data.HardwareType;
            this.West = data.West;
            this.Central = data.Central;
            this.East = data.East;
            this.Stream1 = data.Stream1;
            this.Stream2 = data.Stream2;
        };
        function PieData(data) {
            this.MacType = data.MacType;
            this.Percentage = data.Percentage;
            this.Offset = data.Offset;
        }
        function MyController($scope, $locale) {
            $scope.list = [
                new Type({ 
                    HardwareType: "Desktops", 
                    West: 5, 
                    Central: 2, 
                    East: 3, 
                    Stream1: 3, 
                    Stream2: 1
                }), 
                new Type({ 
                    HardwareType: "Notebooks", 
                    West: 3, 
                    Central: 2, 
                    East: 4, 
                    Stream1: 6, 
                    Stream2: 3
                }), 
                new Type({ 
                    HardwareType: "AIO", 
                    West: 4, 
                    Central: 3, 
                    East: 4, 
                    Stream1: 2, 
                    Stream2: 4
                }), 
                new Type({ 
                    HardwareType: "Tablets", 
                    West: 7, 
                    Central: 2, 
                    East: 2, 
                    Stream1: 9, 
                    Stream2: 7
                }), 
                new Type({ 
                    HardwareType: "Phones", 
                    West: 2, 
                    Central: 1, 
                    East: 5, 
                    Stream1: 5, 
                    Stream2: 2
                })
            ];
            $scope.pieData = [
                new PieData({ 
                    MacType: "MacBook Pro", 
                    Percentage: 46.78,
                    Offset: 15
                }), 
                new PieData({ 
                    MacType: "iMac", 
                    Percentage: 23.18,
                    Offset: 0
                }), 
                new PieData({ 
                    MacType: "MacBook", 
                    Percentage: 20.25,
                    Offset: 0
                })
            ];
        }
    </script>
  4. Add the following markup within the <body> tags to create the widget.
    • We use a <wij-compositechart> directive to create the widget, and set several options as attributes within the element:
      • We set the dataSource option (data-source directive) to specify the "list" from our controller.
      • We set the height and width options.
    • We use nested elements in the markup to set the axisheader, and seriesList options.
      • Inside our axis directive, we nest the y axis, and set the text option.
      • We set the header text to show the title for the chart.
      • Inside our series-list directive, we nest a series directive for each data series.
        • Each of the three column type series directives specifies a label in addition to the column type, and has a nested data directive with x and y options that bind to the data fields in the model.
        • The pie type series directive specifies the separate data-source directive pieData, and a radius and center in addition to the pie type, and has a nested data directive with label and data options that bind to the data fields in the model.
        • The spline type series directive specifies a label in addition to the spline type, and has a nested data directive with x and y options that bind to the data fields in the model.
        • The bezier type series directive specifies a label in addition to the bezier type, and has a nested data directive with x and y options that bind to the data fields in the model.
    Markup
    Copy Code
    <wij-compositechart data-source="list" height="400" width="600">
        <axis>
            <y text="Total Hardware"></y>
        </axis>
        <data>
            <x bind="HardwareType"></x>
        </data>
        <header text="Hardware Distribution"></header>
        <legend visible="true"></legend>
        <series-list>
            <series label="West" type="column">
                <data>
                    <y bind="West"></y>
                </data>
            </series>
            <series label="Central" type="column">
                <data>
                    <y bind="Central"></y>
                </data>
            </series>
            <series label="East" type="column">
                <data>
                    <y bind="East"></y>
                </data>
            </series>
            <series radius="60" type="pie" data-source="pieData">
                <center x="150" y="150"></center>
                <data>
                    <label bind="MacType"></label>
                    <value bind="Percentage"></value>
                    <offset bind="Offset"></offset>
                </data>
            </series>
            <series label="Steam 1" type="spline">
                <data>
                    <y bind="Stream1"></y>
                </data>
                <markers visible="true" type="box"></markers>
            </series>
            <series label="Steam 2" type="bezier">
                <data>
                    <y bind="Stream2"></y>
                </data>
                <markers visible="true" type="diamond"></markers>
            </series>
        </series-list>
    </wij-compositechart>
  5. Save your HTML file and open it in a browser. The widget appears like the following live widget.
    MISSING WIDGET TYPE: The "Live Widget" Widget Type could not be found. The "Live Widget" Widget Type may have been deleted since this Widget was created.
See Also

Reference