Angularjs ile yeni başlıyorum ve birkaç eski JQuery eklentisini Angular yönergelerine dönüştürmek için çalışıyorum. (Element) yönergem için, bir öznitelikte seçenek değeri belirtilerek geçersiz kılınabilen bir dizi varsayılan seçenek tanımlamak istiyorum.
Başkalarının bunu nasıl yaptığını araştırdım ve angular-ui kitaplığında ui.bootstrap.pagination da benzer bir şey gibi görünüyor.
Öncelikle tüm varsayılan seçenekler sabit bir nesnede tanımlanır:
.constant('paginationConfig', {
itemsPerPage: 10,
boundaryLinks: false,
...
})
Ardından getAttributeValue
yönerge denetleyicisine bir yardımcı program işlevi eklenir:
this.getAttributeValue = function(attribute, defaultValue, interpolate) {
return (angular.isDefined(attribute) ?
(interpolate ? $interpolate(attribute)($scope.$parent) :
$scope.$parent.$eval(attribute)) : defaultValue);
};
Son olarak, bu bağlantı işlevinde öznitelikleri şu şekilde okumak için kullanılır:
.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);
...
}
});
Bu, bir dizi varsayılan değeri değiştirmek isteyen standart bir şey için oldukça karmaşık bir kurulum gibi görünüyor. Bunu yapmanın yaygın olan başka yolları var mı? Veya her zaman gibi bir yardımcı program işlevini tanımlamak getAttributeValue
ve seçenekleri bu şekilde ayrıştırmak normal mi? İnsanların bu ortak görev için hangi farklı stratejilere sahip olduğunu öğrenmekle ilgileniyorum.
Ayrıca, bonus olarak, interpolate
parametrenin neden gerekli olduğu konusunda net değilim .
ui.bootstrap.pagination
, olayların neden daha karmaşık bir şekilde yürüdüğüne dair herhangi bir fikriniz var mı? Derleme işlevi kullanılırsa, daha sonra yapılan herhangi bir öznitelik değişikliğinin yansıtılmayacağını düşünüyordum, ancak bu aşamada yalnızca varsayılanlar ayarlandığı için bu doğru görünmüyordu. Sanırım burada bazı ödünleşmeler yapılıyor olmalı.