ฉันเพิ่งเริ่มต้นด้วย angularjs และกำลังทำงานเพื่อแปลงปลั๊กอิน JQuery เก่าสองสามตัวเป็นแนวทางเชิงมุม ฉันต้องการกำหนดชุดตัวเลือกเริ่มต้นสำหรับคำสั่งของฉัน (องค์ประกอบ) ซึ่งสามารถแทนที่ได้โดยการระบุค่าตัวเลือกในแอตทริบิวต์
ฉันได้ดูวิธีที่คนอื่นทำเช่นนี้และในห้องสมุดเชิงมุม uiดูเหมือนว่า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ต้องใช้พารามิเตอร์
ui.bootstrap.paginationทำให้สิ่งต่าง ๆ มีความซับซ้อนมากขึ้น? กำลังคิดว่าถ้าใช้ฟังก์ชั่นคอมไพล์การเปลี่ยนแปลงคุณสมบัติใด ๆ ที่ทำในภายหลังจะไม่ได้รับผลกระทบ แต่สิ่งนี้ดูเหมือนจะไม่เป็นจริงเพราะมีเพียงค่าเริ่มต้นเท่านั้นที่ตั้งค่าไว้ในขั้นตอนนี้ คิดว่าจะต้องมีการแลกเปลี่ยนบางอย่างที่นี่