Właśnie zaczynam od angularjs i pracuję nad konwersją kilku starych wtyczek JQuery do dyrektyw Angular. Chciałbym zdefiniować zestaw domyślnych opcji dla dyrektywy my (element), które można przesłonić, podając wartość opcji w atrybucie.
Rozejrzałem się po tym, jak zrobili to inni, iw bibliotece angular -ui plik ui.bootstrap.pagination wydaje się robić coś podobnego.
Najpierw wszystkie domyślne opcje są zdefiniowane w stałym obiekcie:
.constant('paginationConfig', {
itemsPerPage: 10,
boundaryLinks: false,
...
})
Następnie getAttributeValue
do kontrolera dyrektywy dołączana jest funkcja użyteczności:
this.getAttributeValue = function(attribute, defaultValue, interpolate) {
return (angular.isDefined(attribute) ?
(interpolate ? $interpolate(attribute)($scope.$parent) :
$scope.$parent.$eval(attribute)) : defaultValue);
};
Na koniec jest to używane w funkcji łączenia do wczytywania atrybutów jako
.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);
...
}
});
Wydaje się, że jest to dość skomplikowana konfiguracja w przypadku czegoś tak standardowego, jak chęć zastąpienia zestawu wartości domyślnych. Czy istnieją inne popularne sposoby na zrobienie tego? A może to normalne, że zawsze definiuje się funkcję narzędzia, taką jak getAttributeValue
i analizuje opcje w ten sposób? Jestem zainteresowany, aby dowiedzieć się, jakie różne strategie mają ludzie dla tego wspólnego zadania.
Dodatkowo, jako bonus, nie rozumiem, dlaczego ten interpolate
parametr jest wymagany.
ui.bootstrap.pagination
sprawy są bardziej skomplikowane? Pomyślałem, że jeśli użyjesz funkcji kompilacji, wszelkie zmiany atrybutów dokonane później nie zostaną odzwierciedlone, ale to nie wydaje się być prawdą, ponieważ na tym etapie są ustawione tylko wartości domyślne. Chyba musi nastąpić jakiś kompromis.