Je débute avec Angularjs, et je travaille à convertir quelques vieux plugins JQuery en directives Angular. J'aimerais définir un ensemble d'options par défaut pour ma directive (élément), qui peuvent être remplacées en spécifiant la valeur de l'option dans un attribut.
J'ai cherché à savoir comment les autres ont procédé, et dans la section angular-ui bibliothèque le ui.bootstrap.pagination semble faire quelque chose de similaire.
Tout d'abord, toutes les options par défaut sont définies dans un objet constant :
.constant('paginationConfig', {
itemsPerPage: 10,
boundaryLinks: false,
...
})
Alors un getAttributeValue
La fonction utilitaire est attachée au contrôleur de directives :
this.getAttributeValue = function(attribute, defaultValue, interpolate) {
return (angular.isDefined(attribute) ?
(interpolate ? $interpolate(attribute)($scope.$parent) :
$scope.$parent.$eval(attribute)) : defaultValue);
};
Enfin, il est utilisé dans la fonction de liaison pour lire les attributs comme suit
.directive('pagination', ['$parse', 'paginationConfig', function($parse, config) {
...
controller: 'PaginationController',
link: function(scope, element, attrs, paginationCtrl) {
var boundaryLinks = paginationCtrl.getAttributeValue(attrs.boundaryLinks, config.boundaryLinks);
var firstText = paginationCtrl.getAttributeValue(attrs.firstText, config.firstText, true);
...
}
});
Cela semble être une configuration plutôt compliquée pour quelque chose d'aussi standard que de vouloir remplacer un ensemble de valeurs par défaut. Existe-t-il d'autres façons courantes de procéder ? Ou est-il normal de toujours définir une fonction utilitaire telle que getAttributeValue
et analyser les options de cette manière ? J'aimerais savoir quelles sont les différentes stratégies utilisées par les gens pour cette tâche commune.
En outre, en prime, je ne comprends pas bien pourquoi la interpolate
est nécessaire.