Diretiva Angular com opções padrão
Eu estou apenas começando com angularjs e estou trabalhando na conversão de alguns plugins antigos do JQuery para diretivas Angular. Gostaria de definir um conjunto de opções padrão para minha diretiva (element), que pode ser substituída especificando o valor da opção em um atributo.
Eu tive um olhar ao redor para a maneira como os outros fizeram isso, e noangular-ui biblioteca doui.bootstrap.pagination parece fazer algo semelhante.
Primeiro todas as opções padrão são definidas em um objeto constante:
.constant('paginationConfig', {
itemsPerPage: 10,
boundaryLinks: false,
...
})
Então umagetAttributeValue
função de utilidade é anexada ao controlador de diretiva:
this.getAttributeValue = function(attribute, defaultValue, interpolate) {
return (angular.isDefined(attribute) ?
(interpolate ? $interpolate(attribute)($scope.$parent) :
$scope.$parent.$eval(attribute)) : defaultValue);
};
Finalmente, isso é usado na função de vinculação para ler em atributos como
.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);
...
}
});
Isso parece ser uma configuração bastante complicada para algo tão padrão quanto querer substituir um conjunto de valores padrão. Existem outras maneiras de fazer isso que são comuns? Ou é normal sempre definir uma função de utilidade comogetAttributeValue
e analisar as opções dessa maneira? Estou interessado em descobrir que estratégias diferentes as pessoas têm para essa tarefa comum.
Além disso, como bônus, não estou claro por queinterpolate
parâmetro é obrigatório.