Tôi mới bắt đầu với angularjs và đang nghiên cứu chuyển đổi một vài bổ trợ JQuery cũ thành các chỉ thị Angular. Tôi muốn xác định một tập hợp các tùy chọn mặc định cho chỉ thị (phần tử) của tôi, có thể được ghi đè bằng cách chỉ định giá trị tùy chọn trong một thuộc tính.
Tôi đã có một cái nhìn xung quanh về cách người khác đã làm điều này, và trong thư viện góc cạnh, ui.bootstrap.pagination dường như làm điều gì đó tương tự.
Đầu tiên tất cả các tùy chọn mặc định được xác định trong một đối tượng không đổi:
.constant('paginationConfig', {
itemsPerPage: 10,
boundaryLinks: false,
...
})
Sau đó, một getAttributeValue
chức năng tiện ích được gắn vào bộ điều khiển chỉ thị:
this.getAttributeValue = function(attribute, defaultValue, interpolate) {
return (angular.isDefined(attribute) ?
(interpolate ? $interpolate(attribute)($scope.$parent) :
$scope.$parent.$eval(attribute)) : defaultValue);
};
Cuối cùng, điều này được sử dụng trong chức năng liên kết để đọc các thuộc tính như
.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);
...
}
});
Đây có vẻ như là một thiết lập khá phức tạp đối với một cái gì đó tiêu chuẩn như muốn thay thế một tập hợp các giá trị mặc định. Có cách nào khác để làm điều này là phổ biến không? Hoặc là bình thường khi luôn xác định một chức năng tiện ích như getAttributeValue
và phân tích các tùy chọn theo cách này? Tôi quan tâm để tìm hiểu những chiến lược khác nhau mà mọi người có cho nhiệm vụ chung này.
Ngoài ra, như một phần thưởng, tôi không rõ tại sao interpolate
tham số được yêu cầu.
ui.bootstrap.pagination
mọi thứ theo một cách phức tạp hơn? Đã nghĩ rằng nếu sử dụng hàm biên dịch thì mọi thay đổi thuộc tính được thực hiện sau đó sẽ không được phản ánh, nhưng điều này dường như không đúng vì chỉ có các mặc định được đặt ở giai đoạn này. Đoán phải có một số đánh đổi được thực hiện ở đây.