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