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


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

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

терминал

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

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

  1. указания1 с { приоритет: 1, терминале: ложные}
  2. directive2 с { priority: 10, terminal: false}
  3. directive3 с { priority: 100, terminal: false}
  4. directive4 с { priority: 100, terminal: true} // this is true
  5. directive5 с { priority: 1000, terminal: false}

обратите внимание:directive4 и terminal:true и другие false.

если есть html тег имеет все 5 директив:

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

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

1 62

1 ответ:

приоритет

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

терминал

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

свойство terminal говорит 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 в этом случае, как из них будут применяться, поскольку порядок директив с одинаковым приоритетом не определен.

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