什么是ng-repeat指令的优先级可以改变它?

Angular文档说:

DOM的编译是通过调用$ compile()方法来完成的。 该方法遍历DOM并匹配指令。 如果find匹配项,则将其添加到与给定DOM元素关联的指令列表中。 一旦给定DOM元素的所有指令都被识别出来,它们将按照优先级进行sorting,并执行它们的compile()函数。

我相信ng-repeat指令比自定义指令具有更低的优先级,在某些使用情况下(如dynamic标识和自定义指令) 。 angular度允许修改指令的优先级来select一个之前的执行吗?

是的,您可以设置指令的优先级。 ng-repeat的优先级为1000 ,实际上高于自定义指令(默认优先级为0)。 你可以用这个数字作为指导,如何在你的指令上设置自己的优先级。

 angular.module('x').directive('customPriority', function() { return { priority: 1001, restrict: 'E', compile: function () { return function () {...} } } }) 

优先级 – 当在单个DOM元素上定义了多个指令时,有时需要指定指令的应用顺序。 优先级用于在调用编译函数之前对指令进行sorting。 优先级被定义为一个数字。 首先编译具有更高数字优先级的指令。 具有相同优先级的指令的顺序是未定义的。 默认优先级是0。

AngularJSfind与元素相关的所有指令并对其进行处理。 这个选项告诉angular通过优先级对指令进行sorting,因此具有更高优先级的指令将被编译或链接到其他指令之前。 拥有这个选项的原因是我们可以对编译的指令的输出进行条件检查。

在后面的例子中,首先添加button,并且只在将class添加到当前button之后:

演示小提琴

 App.directive('btn', function() { return { restrict: 'A', priority: 1, link: function(scope, element, attrs) { element.addClass('btn'); } }; }); App.directive('primary', function() { return { restrict: 'A', priority: 0, link: function(scope, element, attrs) { if (element.hasClass('btn')) { element.addClass('btn-primary'); } } }; });