優先
優先級,當你有一個元素上的多個指令纔有意義。優先級決定了這些指令將以何種順序應用/啓動。在大多數情況下,您不需要優先級,但有時在使用編譯函數時,您需要確保編譯函數首先運行。
終端
終端屬性也只對是相同的HTML元素指令相關。也就是說,如果您在my-directive1
和my-directive2
指令中有<div my-directive1></div> <div my-directive2></div>
,priority
和terminal
不會相互影響。如果你有<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>
但是,對於這一點,您會看到「我是myDirective1」,因爲它們位於不同的元素上。
<div my-directive1></div>
<div my-directive2></div>
<div my-directive3></div>
原帖
在你的榜樣,優先100和1000的指令都將得到應用,因爲具有較高優先級的指令會先應用唯一的,所以一個優先1000將首先應用。
如果在這種情況下您有兩個優先級爲100的指令,則兩個指令都將被應用,因爲具有相同優先級的指令的順序未定義。
請注意,這僅適用於位於同一元素上的指令。
謝謝,但你沒有提到'terminal'(指令4)。如果html標籤包含所有5個指令,那麼順序是什麼? – Freewind 2013-03-07 09:19:24
我已經用一些希望清除事情的例子更新了我的答案。 – 2013-03-07 09:31:30
更清晰,謝謝。還有一個小問題:如果在標籤「
」中有'my-directive4'具有'{priority:10,terminal:false}'怎麼辦?它應該始終運行,但它可能在'my-directive2'之前或之後,對吧? – Freewind 2013-03-07 09:50:30