Angular JS Magazine

joi, 2 octombrie 2014

Custom Directive - Using a Template

In previous tips you saw how to create a custom directive. As an alternative approach we can use content from an HTML template, which is used to replace the content of the element to which the directive is applied. The below code is our ordered list written using a HTML template:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <script src="../angular/angular.min.js"></script>
    <style type="text/css">
    </style>
    <script>
        angular.module("appModule", [])
                .controller("appCtrl", function ($scope) {
                    $scope.players = [
                        { name: 'Nadal, Rafael (ESP)', rank: 1, age: '28', prizemoney: 66149345 },
                        { name: 'Djokovic, Novak (SRB)', rank: 2, age: '27', prizemoney: 70704129 },
                        { name: 'Federer, Roger (SUI)', rank: 3, age: '33', prizemoney: 84827704 },
                        { name: 'Wawrinka, Stan (SUI)', rank: 4, age: '29', prizemoney: 13155060 },
                        { name: 'Ferrer, David (ESP)', rank: 5, age: '32', prizemoney: 24034072 },
                        { name: 'Tsonga, Jo-Wilfried (FRA)', rank: 11, age: '29', prizemoney: 1708240 },
                        { name: 'Simon, Gilles (FRA)', rank: 26, age: '29', prizemoney: 760469 },
                        { name: 'Lopez, Feliciano (ESP)', rank: 20, age: '33', prizemoney: 1100579 },
                        { name: 'Benneteau, Julien (FRA)', rank: 28, age: '32', prizemoney: 617688 },
                        { name: 'Verdasco, Fernando (ESP)', rank: 33, age: '30', prizemoney: 689219 },
                        { name: 'Mayer, Leonardo (ARG)', rank: 25, age: '27', prizemoney: 946294 }
                    ];
                    $scope.updatePrizeMoney = function () {
                        angular.forEach($scope.players, function (player) {
                            player.prizemoney = player.prizemoney +
                                         Math.floor((Math.random() * (900000 - 10000) + 10000));
                        });
                    }
                })
                .directive("orderedList", function () {
                    return {
                        link: function (scope, element, attrs) {
                            var data = scope[attrs["orderedList"]];
                        },
                        restrict: 'A',
                        template: "<ol type='i'><li ng-repeat='item in players'>"
                                + "{{item.prizemoney | currency}}</li></ol>"
                    }
                });
    </script>
</head>
<body>
<div ng-app="appModule" ng-controller="appCtrl">

    <h4>Creating a Simple Custom Directive - List Directive</h4>

    <button class="btn btn-primary" ng-click="updatePrizeMoney()">
        Updated Prizes
    </button>
    <div ordered-list="players"/>
</div>
</body>
</html>