>  기사  >  웹 프론트엔드  >  무한 루프 없이 AngularJS에서 상위 지시문의 지시문을 추가하는 방법은 무엇입니까?

무한 루프 없이 AngularJS에서 상위 지시문의 지시문을 추가하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-02 18:49:31698검색

How to Add Directives from a Parent Directive in AngularJS Without Infinite Loops?

AngularJS에서 상위 지시문의 지시문 추가

AngularJS에서는 이미 존재하는 요소에 추가 지시문을 추가해야 할 수도 있습니다. 부모 지시문을 갖추고 있습니다. $compile 서비스는 이를 달성하기 위한 수단을 제공하지만 무한 루프를 피하는 것이 중요합니다.

이 문제를 방지하려면 필수 속성이 요소에 이미 추가되었는지 검사하는 것이 좋습니다. 그러나 $compile을 사용하여 요소를 업데이트하면 지시문이 초기화되지 않습니다.

이 접근 방식이 적합한가요?

앞서 언급한 접근 방식은 일반적으로 유효합니다. 그러나 적절한 기능을 보장하려면 조정이 필요할 수 있습니다.

대체 방법

대체 솔루션은 우선 순위 속성을 활용하여 단일 요소에 대한 지시어 적용 순서를 지정하는 것입니다. 우선순위 값이 더 높은 지시어가 먼저 실행됩니다. 상위 지시문에 높은 우선순위를 할당하면 초기화가 하위 지시문보다 우선하도록 할 수 있습니다.

지시문 조정

토론에 따르면 다음과 같습니다. 지침의 수정된 버전은 실행 가능한 솔루션을 제공합니다.

<code class="javascript">angular.module('app')
  .directive('commonThings', function ($compile) {
    return {
      restrict: 'A',
      replace: false,
      terminal: true, // Prevent subsequent directives from executing
      priority: 1000, // Assign a high priority for early execution
      compile: function compile(element, attrs) {
        // Add additional attributes
        element.attr('tooltip', '{{dt()}}');
        element.attr('tooltip-placement', 'bottom');

        // Remove the parent directive attribute to avoid looping
        element.removeAttr('common-things');
        element.removeAttr('data-common-things');

        return {
          pre: function preLink(scope, iElement, iAttrs, controller) { },
          post: function postLink(scope, iElement, iAttrs, controller) {
            $compile(iElement)(scope);
          },
        };
      },
    };
  });</code>

이 업데이트된 지침은 무한 루프를 방지하면서 원하는 속성을 효과적으로 추가합니다. 터미널 속성을 활용하여 후속 지시문의 실행을 중지하고 하위 지시문이 초기화된 후에 해당 지시문이 적용되도록 합니다.

위 내용은 무한 루프 없이 AngularJS에서 상위 지시문의 지시문을 추가하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.