Priority
仅当一个元素上有多个指令时,优先级才相关。优先级决定了这些指令的应用/启动顺序。在大多数情况下,您不需要优先级,但有时当您使用编译函数时,您希望确保编译函数首先运行。
Terminal
Terminal 属性也仅与同一 HTML 元素上的指令相关。也就是说,如果你有<div my-directive1></div> <div my-directive2></div>
, priority
and terminal
在你的指令中my-directive1
and 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 的指令,则这两个指令都将被应用,因为具有相同优先级的指令的顺序未定义。
请注意,这仅适用于同一元素上的指令。