如何理解指令的`terminal`?
在这个页面中: http : //docs.angularjs.org/guide/directive
指令定义对象
终奌站
如果设置为true,那么当前优先级将是将要执行的最后一组指令(当前优先级的任何指令仍将执行,因为相同优先级上的执行次序是未定义的)。
我不太明白。 current priority
是什么意思? 如果有这样的指示:
- 指令1与{优先级:1,terminal:假}
- 指令2与{优先级:10,terminal:假}
- 指令3与{优先级:100,terminal:假}
- 指令4 with {priority:100,terminal:true} //这是真的
- 指令5 with {priority:1000,terminal:false}
请注意directive4
有terminal:true
,其他人有false
。
如果有一个html标签有所有的5个指令:
<div directive1 directive2 directive3 directive4 directive5></div>
5个指令的执行顺序是什么?
优先
只有当你在一个元素上有多个指令时,优先级才是相关的。 优先级决定了这些指令将以何种顺序被应用/启动。 在大多数情况下,您不需要优先级,但有时在使用编译函数时,您需要确保编译函数首先运行。
终奌站
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"); } } });
为此,您只能在控制台中看到“我是myDirective2”和“我是myDirective3”。
<div my-directive1 my-directive2 my-directive3></div>
但是,对于这一点,你会看到“我是我的指挥1”,因为它们在不同的元素上。
<div my-directive1></div> <div my-directive2></div> <div my-directive3></div>
原帖
在你的例子中,优先级为100和1000的指令是唯一被应用的指令,因为优先级较高的指令被首先应用,所以具有优先级1000的指令将首先被应用。
如果在这种情况下有两个优先级为100的指令,则两个指令都将被应用,因为具有相同优先级的指令的顺序是未定义的。
请注意,这只适用于在同一元素上的指令。