角度指令执行顺序

时间:2015-05-27 11:25:44

标签: javascript angularjs

如果我有一些指令应用于AngularJS中的元素,它们将按什么顺序执行?

例如:

<input ng-change='foo()' data-number-formatter></input>

首先触发数字格式化程序或更改事件。这是确定性的吗?

3 个答案:

答案 0 :(得分:5)

编译指令的顺序直接基于priority

来自docs

  

当在单个DOM元素上定义了多个指令时,   有时需要指定指令的顺序   适用。优先级用于在指令之前对指令进行排序   编译函数被调用。优先级定义为数字。   首先编译具有更高数字优先级的指令。   预链接功能也按优先级顺序运行,但后链接   函数以相反的顺序运行。指令的顺序与   相同的优先级未定义。默认优先级为0。

答案 1 :(得分:2)

docs说:

  

当在单个DOM元素上定义了多个指令时,   有时需要指定指令的顺序   适用。优先级用于在指令之前对指令进行排序   编译函数被调用。优先级定义为数字。   首先编译具有更高数字优先级的指令。   预链接功能也按优先级顺序运行,但后链接   函数以相反的顺序运行。指令的顺序与   相同的优先级未定义。默认优先级为0。

另外

  

预链接功能:在链接子元素之前执行。   自编译器链接函数以来,进行DOM转换是不安全的   将无法找到正确的链接元素。

     

链接后功能:链接子元素后执行。   在链接后功能中进行DOM转换是安全的。

答案 2 :(得分:1)

(这个问题不是关于priority设置,而是关于指令的执行,而不是编译。)

如果在number-formatter指令是基于所述标准$parsers / $formatters链,那么相信顺序保证是格式化器/语法分析器第一,ng-change之后。即使您指定ng-model-options="{updateOn: 'change'}",订单仍然相同。

小提琴:http://jsfiddle.net/4dtnvrbh/(尝试各种ng-model-options并观看控制台。)