根据我的理解,将terminal
设置为true将导致该指令最后执行,并且具有更高优先级的任何指令将在它之前(自然地)执行,并且具有较低优先级的任何指令将不会在所有。
但是,当使用带有内置指令的自定义指令时,似乎会切换此行为。假设我们使用带有ng-repeat的自定义指令,除非自定义指令的优先级小于1000(这是ng-repeat的优先级),它将不会执行。
这是一个代表我的问题的JSFiddle:http://jsfiddle.net/codef0rmer/aNCY3/
参考JSFiddle代码,仅使用自定义指令(first
,second
):只要first
的优先级为2或更高,它就会在second
之前执行{1}}。如果优先级高于2,则不会执行。
将自定义指令与内置指令(noEntry
,ngRepeat
)结合使用:由于ngRepeat
的优先级为1000,如果noEntry
具有优先级如果为1000或更高,它将不会执行,但它将以低于1000的优先级执行。
答案 0 :(得分:2)
我在你的小提琴的my fork做了一些窥探,我发现当自定义指令具有更高的优先级时,它会在ng-repeat
之前执行。换句话说,它是在li
实际呈现在DOM之前执行的。由于没有要追加的列表项,因此没有任何反应。
您可以看到该指令通过在指令中的console.log
之前添加return
语句并在浏览器上打开控制台来执行,就像我在这里所做的那样:
App.directive('noEntry', function() {
console.log("Testing...");
return {
restrict: 'A',
priority: 1001,
link: function(scope, element, attrs) {
element.append('No Entry: Executed ');
}
};
});
使用terminal
中的second
声明,我认为no-entry
没有任何效果。