web-dev-qa-db-ger.com

Welche Priorität hat die ng-repeat-Direktive? Können Sie sie ändern?

Angular Documentation sagt: -

Die Kompilierung des DOM erfolgt durch den Aufruf der $ compile () -Methode. Die Methode durchläuft das DOM und stimmt mit den Anweisungen überein. Wenn eine Übereinstimmung gefunden wird, wird sie zur Liste der Anweisungen hinzugefügt, die dem angegebenen DOM-Element zugeordnet sind. Sobald alle Direktiven für ein bestimmtes DOM-Element identifiziert wurden, werden sie nach Priorität sortiert und ihre compile () -Funktionen sind hingerichtet.

Ich glaube, die ng-repeat-Direktive hat eine niedrigere Priorität als benutzerdefinierte Direktiven, in bestimmten Anwendungsfällen wie dynamische ID und benutzerdefinierte Direktive . Erlaubt es angular, mit der Priorität von Anweisungen zu basteln, die Ausführung einer vor der anderen zu wählen?

38
Sangram Singh

Ja, Sie können die Priorität einer Direktive festlegen. ng-repeat hat eine Priorität von 10 , was tatsächlich höher ist als bei benutzerdefinierten Anweisungen (die Standardpriorität ist 0). Sie können diese Nummer als Richtlinie verwenden, um Ihre eigenen Prioritäten in Bezug auf Ihre Richtlinien festzulegen.

angular.module('x').directive('customPriority', function() {
    return {
        priority: 1001,
        restrict: 'E',
        compile: function () {
            return function () {...}
        }
    }
})

priority - Wenn für ein einzelnes DOM-Element mehrere Direktiven definiert sind, muss manchmal die Reihenfolge angegeben werden, in der die Direktiven angewendet werden. Die Priorität wird verwendet, um die Direktiven zu sortieren, bevor ihre Kompilierungsfunktionen aufgerufen werden. Die Priorität ist als Zahl definiert. Direktiven mit höherer numerischer Priorität werden zuerst kompiliert. Die Reihenfolge der Direktiven mit der gleichen Priorität ist undefiniert. Die Standardpriorität ist 0.

55
Cuong Vo

AngularJS findet alle Anweisungen, die einem Element zugeordnet sind, und verarbeitet es. Diese Option weist angular an, Direktiven nach Priorität zu sortieren, damit eine Direktive mit höherer Priorität vor anderen kompiliert oder verknüpft wird. Der Grund für diese Option ist, dass wir eine bedingte Prüfung der Ausgabe von durchführen können vorherige Richtlinie zusammengestellt.

Im folgenden Beispiel fügen Sie zuerst die Schaltfläche und erst dann class zur aktuellen Schaltfläche hinzu:

Demo Fiddle

App.directive('btn', function() {
  return {
    restrict: 'A',
    priority: 1,
    link: function(scope, element, attrs) {
      element.addClass('btn');
    }
  };
});

App.directive('primary', function() {
  return {
    restrict: 'A',
    priority: 0,
    link: function(scope, element, attrs) {
      if (element.hasClass('btn')) {
        element.addClass('btn-primary');
      }
    }
  };
});
11
Maxim Shoustin