如果我有一些指令应用于AngularJS中的元素,它们将按什么顺序执行?
例如:
<input ng-change='foo()' data-number-formatter></input>
首先触发数字格式化程序或更改事件。这是确定性的吗?
答案 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
并观看控制台。)