# decorator usage in angularjs
# decorator for a service
# decorator for a directive
- experiment-decorating-directives
- overriding-directive-definitions-in-angularjs
- angular-hacking-core : brian ford
- decorating-the-ng-click-directive-in-angularjs : stackoverflow
# 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
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