Как понять "терминал" директивы?

На этой странице: http://docs.angularjs.org/guide/directive

Директива Определение Объекта

Терминал

Если установлено значение true, то текущий приоритет будет последним набором директив, которые будут выполняться (любые директивы с текущим приоритетом будут выполняться, поскольку порядок выполнения с тем же приоритетом не определен).

Я не очень хорошо понимаю Что значит current priority имею в виду? Если есть такие директивы:

  1. директива1 с {приоритетом: 1, терминал: ложь}
  2. директива2 с {приоритетом: 10, терминал: ложь}
  3. директива3 с {приоритетом: 100, терминал: ложь}
  4. directive4 с { priority: 100, terminal: true} // это верно
  5. директива 5 с {приоритет: 1000, терминал: ложь}

Пожалуйста, обратите внимание directive4 имеет terminal:true и другие имеют false,

Если есть HTML-тег имеет все 5 директив:

<div directive1 directive2 directive3 directive4 directive5></div>

Каков порядок выполнения 5 директив?

1 ответ

Решение

приоритет

Приоритет имеет значение только тогда, когда у вас есть несколько директив на один элемент. Приоритет определяет, в каком порядке эти директивы будут применяться / запускаться. В большинстве случаев вам не нужен приоритет, но иногда, когда вы используете функцию компиляции, вы хотите убедиться, что ваша функция компиляции запускается первой.

Терминал

Свойство терминала также имеет отношение только к директивам, которые находятся в одном и том же элементе HTML. То есть, если у вас есть <div my-directive1></div> <div my-directive2></div>, priority а также terminal в ваших директивах my-directive1 а также my-directive2 не будут влиять друг на друга. Они будут влиять друг на друга, только если у вас есть <div my-directive1 my-directive2></div>,

Свойство терминала указывает Angular пропускать все директивы в том элементе, который идет после него (более низкий приоритет). Так что этот код может прояснить это:

myModule.directive('myDirective1', function() {
    return {
        priority: 1,
        terminal: false,
        link: function() {
            console.log("I'm myDirective1");
        }
    }
});

myModule.directive('myDirective2', function() {
    return {
        priority: 10,
        terminal: true,
        link: function() {
            console.log("I'm myDirective2");
        }
    }
});

myModule.directive('myDirective3', function() {
    return {
        priority: 100,
        terminal: false,
        link: function() {
            console.log("I'm myDirective3");
        }
    }
});

Для этого вы увидите только "I'm myDirective2" и "I'm myDirective3" в консоли.

<div my-directive1 my-directive2 my-directive3></div>

Но для этого вы также увидите "I'm myDirective1", так как они находятся на разных элементах.

<div my-directive1></div>
<div my-directive2></div>
<div my-directive3></div>

Оригинальный пост

В вашем примере директивы с приоритетом 100 и 1000 являются единственными, которые будут применены, так как директива с более высоким приоритетом применяется первой, так что директива с приоритетом 1000 будет применяться первой.

Если в этом случае у вас есть две директивы с приоритетом 100, обе они будут применены, потому что порядок директив с одинаковым приоритетом не определен.

Обратите внимание, что это относится только к директивам, которые находятся на одном элементе.

Другие вопросы по тегам