# decorator usage in angularjs

# decorator for a service

# decorator for a directive

# exemple : decorator de ng-if

Permet de rajouter un paramètre à ng-if dans le html sous la forme d'un autre attribut (ng-if-param). Les valeurs passées à ce paramètre servent d'entrée pour un service exécuté dans le decorator. Très utile pour la gestion des droits par exemple.

Usage dans le html :

<div ng-if="ngIfValue" ng-if-param="paramValue"></div>
1
(function (angular) {
    'use strict';

    angular
        .module('app')
        .config(config);

    config.$inject = ['$provide'];

    function config($provide) {

        $provide.decorator("ngIfDirective", ['$delegate', 'customService', function($delegate, customService) {
            var original = $delegate[0];
            var link = original.link;

            // redéfinition de la fonction link de la directive angular ng-if
            original.compile = function() {
                return function($scope, $element, $attr, ctrl, $transclude) {

                    // check maison sur la base d'un attribut ng-if-param
                    if($attr.ngIfParam) {
                        var paramValue = eval($attr.ngIfParam);
                        if (customService.fn(paramValue)) {
                            // on substitue la valeur de ng-if par false
                            $attr.ngIf = "false";
                        }
                    }

                    // appliquer le comportement normal de ng-if
                    link.apply(this, arguments);
                };
            };

            return $delegate;
        }]);
    }

})(angular);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38