Ich fange gerade mit anglejs an und arbeite daran, einige alte JQuery-Plugins in Angular-Direktiven zu konvertieren. Ich möchte eine Reihe von Standardoptionen für meine (Element-) Direktive definieren, die durch Angabe des Optionswerts in einem Attribut überschrieben werden können.
Ich habe mich nach der Art und Weise umgesehen, wie andere dies getan haben, und in der Angular-UI - Bibliothek scheint die ui.bootstrap.pagination etwas Ähnliches zu tun.
Zunächst werden alle Standardoptionen in einem konstanten Objekt definiert:
.constant('paginationConfig', {
itemsPerPage: 10,
boundaryLinks: false,
...
})
Dann wird eine getAttributeValue
Dienstprogrammfunktion an die Direktivensteuerung angehängt:
this.getAttributeValue = function(attribute, defaultValue, interpolate) {
return (angular.isDefined(attribute) ?
(interpolate ? $interpolate(attribute)($scope.$parent) :
$scope.$parent.$eval(attribute)) : defaultValue);
};
Schließlich wird dies in der Verknüpfungsfunktion verwendet, um Attribute als einzulesen
.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);
...
}
});
Dies scheint eine ziemlich komplizierte Einrichtung für etwas zu sein, das so Standard ist wie das Ersetzen einer Reihe von Standardwerten. Gibt es andere übliche Möglichkeiten, dies zu tun? Oder ist es normal, immer eine Dienstprogrammfunktion wie getAttributeValue
und Analyseoptionen auf diese Weise zu definieren? Ich bin daran interessiert herauszufinden, welche unterschiedlichen Strategien Menschen für diese gemeinsame Aufgabe haben.
Als Bonus ist mir auch nicht klar, warum der interpolate
Parameter erforderlich ist.
ui.bootstrap.pagination
die Dinge komplizierter werden? Dachte, dass bei Verwendung der Kompilierungsfunktion später vorgenommene Attributänderungen nicht berücksichtigt würden, dies scheint jedoch nicht der Fall zu sein, da zu diesem Zeitpunkt nur die Standardeinstellungen festgelegt werden. Vermutlich muss hier ein Kompromiss geschlossen werden.