AngularJS를 사용하여 동적으로 지시어 추가
이 문서에서는 AngularJS 개발의 일반적인 관심사인 단일 DOM 요소에 여러 지시어를 추가하는 문제를 다룹니다. 목표는 datepicker, datepicker-언어 및 ng-required와 같은 특정 속성을 대상 요소에 추가하는 지시문을 만드는 것입니다.
원래 접근 방식: 추가된 속성 확인
처음에 개발자는 필요한 속성을 추가하기 전에 이미 추가되었는지 확인하려고 했습니다.
<code class="javascript">if (element.attr('datepicker')) { // check return; }</code>
그러나 이 접근 방식은 $compile을 사용할 때 무한 루프를 발생시켰습니다. 추가된 속성을 처리하려고 시도합니다.
업데이트된 접근 방식: 우선 순위 및 터미널 활용
외부 입력을 받은 후 개발자는 솔루션에 우선 순위와 터미널을 모두 설정해야 한다는 것을 깨달았습니다. 사용자 지정 지시문의 속성입니다. 이 접근 방식에는 다음이 포함됩니다.
구현
다음은 우선 순위와 터미널을 사용하여 지시어를 구현한 예입니다.
<code class="javascript">angular.module('app').directive('superDirective', function ($compile) { return { restrict: 'A', replace: false, terminal: true, priority: 1000, link: function (scope, element, attrs) { // Remove the "superDirective" attribute to avoid looping. element.removeAttr("superDirective"); // Add the necessary attributes. element.attr('datepicker', 'someValue'); element.attr('datepicker-language', 'en'); // Compile the element. $compile(element)(scope); } }; });</code>
이 접근 방식을 사용하면 사용자 정의 지시어를 사용하여 요소를 수정하고 속성을 추가한 다음 $compile을 사용하여 Terminal:true로 인해 건너뛴 지시어를 포함하여 모든 지시어를 컴파일합니다.
설명
By 터미널을 true로 설정하면 사용자 지정 지시문은 대상 요소에서 컴파일된 유일한 지시문이 됩니다. 이렇게 하면 중복 컴파일과 잠재적인 충돌을 방지할 수 있습니다. 우선순위가 높으면 사용자 정의 지시어가 먼저 컴파일되어 다른 지시어가 액세스를 시도하기 전에 요소를 수정할 수 있습니다.
위 내용은 AngularJS를 사용하여 지시문을 동적으로 추가할 때 무한 루프를 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!