Угловая директива с опциями по умолчанию
Я только начинаю с angularjs и работаю над преобразованием нескольких старых плагинов JQuery в директивы Angular. Я бы хотел определить набор параметров по умолчанию для моей директивы (element), который можно переопределить, указав значение параметра в атрибуте.
Я посмотрел вокруг, как другие сделали это, и вУгловое-щ библиотекаui.bootstrap.pagination кажется, делает что-то подобное.
Сначала все параметры по умолчанию определяются в постоянном объекте:
.constant('paginationConfig', {
itemsPerPage: 10,
boundaryLinks: false,
...
})
ЗатемgetAttributeValue
Функция полезности привязана к директиве контроллера:
this.getAttributeValue = function(attribute, defaultValue, interpolate) {
return (angular.isDefined(attribute) ?
(interpolate ? $interpolate(attribute)($scope.$parent) :
$scope.$parent.$eval(attribute)) : defaultValue);
};
Наконец, это используется в функции связывания для чтения в атрибутах как
.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);
...
}
});
Это выглядит довольно сложной настройкой для чего-то стандартного, например, для замены набора значений по умолчанию. Есть ли другие способы сделать это, которые распространены? Или это нормально, чтобы всегда определять функцию полезности, такую какgetAttributeValue
а разбирать варианты таким способом? Мне интересно узнать, какие у людей разные стратегии для решения этой общей задачи.
Кроме того, в качестве бонуса, я не понимаю, почемуinterpolate
параметр обязателен