Как понять "терминал" директивы?
на этой странице: http://docs.angularjs.org/guide/directive
Объект Определения Директивы
терминал
если установлено значение true, то текущий приоритет будет последним набором директив, которые будут выполняться (любые директивы с текущим приоритетом будут по-прежнему выполняться, поскольку порядок выполнения по тому же приоритету не определен).
Я не очень хорошо это понимаю. Что значит current priority
в смысле? Если есть есть такие директивы:
- указания1 с { приоритет: 1, терминале: ложные}
- directive2 с { priority: 10, terminal: false}
- directive3 с { priority: 100, terminal: false}
- directive4 с { priority: 100, terminal: true} // this is true
- directive5 с { priority: 1000, terminal: false}
обратите внимание:directive4
и terminal:true
и другие false
.
если есть html тег имеет все 5 директив:
<div directive1 directive2 directive3 directive4 directive5></div>
Каков порядок выполнения 5 директив?
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 в этом случае, как из них будут применяться, поскольку порядок директив с одинаковым приоритетом не определен.
обратите внимание, что это относится только к директивам, которые находятся на том же элементе.