如何理解指令的`terminal`?

在这个页面中: http : //docs.angularjs.org/guide/directive

指令定义对象

终奌站

如果设置为true,那么当前优先级将是将要执行的最后一组指令(当前优先级的任何指令仍将执行,因为相同优先级上的执行次序是未定义的)。

我不太明白。 current priority是什么意思? 如果有这样的指示:

  1. 指令1与{优先级:1,terminal:假}
  2. 指令2与{优先级:10,terminal:假}
  3. 指令3与{优先级:100,terminal:假}
  4. 指令4 with {priority:100,terminal:true} //这是真的
  5. 指令5 with {priority:1000,terminal:false}

请注意directive4terminal:true ,其他人有false

如果有一个html标签有所有的5个指令:

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

5个指令的执行顺序是什么?

优先

只有当你在一个元素上有多个指令时,优先级才是相关的。 优先级决定了这些指令将以何种顺序被应用/启动。 在大多数情况下,您不需要优先级,但有时在使用编译函数时,您需要确保编译函数首先运行。

终奌站

terminal属性也仅与位于同一HTML元素上的指令相关。 也就是说,如果你有<div my-directive1></div> <div my-directive2></div> ,你的指令中的priorityterminal my-directive1my-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的指令,则两个指令都将被应用,因为具有相同优先级的指令的顺序是未定义的。

请注意,这只适用于在同一元素上的指令。