방금 angularjs로 시작하고 몇 가지 오래된 JQuery 플러그인을 Angular 지시문으로 변환하려고합니다. 속성에 옵션 값을 지정하여 재정의 할 수있는 (요소) 지시문에 대한 기본 옵션 세트를 정의하고 싶습니다.
다른 사람들 이이 작업을 수행 한 방식을 둘러 보았고 angular-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
사물이 더 복잡한 방식으로 생각됩니까? 컴파일 기능을 사용하는 경우 나중에 변경 한 속성 변경 사항은 반영되지 않지만이 단계에서 기본값 만 설정 되었기 때문에 사실이 아닌 것으로 보입니다. 여기에 약간의 상충 관계가있을 것 같아요.