Dyrektywa Angular z opcjami domyślnymi

Zaczynam od angularjs i pracuję nad konwersją kilku starych wtyczek JQuery do dyrektyw Angular. Chciałbym zdefiniować zestaw domyślnych opcji dla dyrektywy moja (element), którą można przesłonić, określając wartość opcji w atrybucie.

Rozejrzałem się za sposobem, w jaki inni to zrobili, i zakątowe-ui bibliotekaui.bootstrap.pagination wydaje się robić coś podobnego.

Najpierw wszystkie opcje domyślne są zdefiniowane w stałym obiekcie:

.constant('paginationConfig', {
  itemsPerPage: 10,
  boundaryLinks: false,
  ...
})

NastępniegetAttributeValue Funkcja narzędzia jest dołączona do kontrolera dyrektywy:

this.getAttributeValue = function(attribute, defaultValue, interpolate) {
    return (angular.isDefined(attribute) ?
            (interpolate ? $interpolate(attribute)($scope.$parent) :
                           $scope.$parent.$eval(attribute)) : defaultValue);
};

Ostatecznie jest to używane w funkcji łączenia do odczytywania 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ę to dość skomplikowaną konfiguracją dla czegoś tak standardowego jak chęć zastąpienia zestawu wartości domyślnych. Czy są jakieś inne sposoby, aby to zrobić? Czy też normalne jest zawsze definiowanie funkcji użyteczności, takiej jakgetAttributeValue i analizować opcje w ten sposób? Jestem zainteresowany, aby dowiedzieć się, jakie różne strategie ludzie mają do tego wspólnego zadania.

Dodatkowo, nie jestem pewien, dlaczegointerpolate parametr jest wymagany.

questionAnswers(3)

yourAnswerToTheQuestion