angularjs - 自定义指令名称" smart-float"

时间:2014-04-03 14:13:35

标签: javascript angularjs angularjs-directive

我有一个简单或非常奇怪的问题:

在角形官方表格教程中,有一个“自定义验证”部分:
http://docs.angularjs.org/guide/forms

我将代码复制到Plunker:
http://plnkr.co/edit/6pcUJNUD3Zkyv5bx6OTe?p=preview

我想要的是输入需要做2次验证:required和smart-float, 目前,Plunker代码工作正常。

但是如果你将指令名称“smart-float”更改为另一个,例如“all-eng”,则会转到一个小问题:
如果您输入的内容不是浮点数,则显示“必需”和“浮动”验证错误两者

我尝试使用Chrome 33,Firefox 27,没有运气 谷歌“angularjs指令名称限制”,没有运气
google“angularjs指令名称smart-float”,没有运气
将我的angularjs从1.2.13升级到1.2.15,没有运气

这是一个错误吗?有人给我一个暗示吗?

1 个答案:

答案 0 :(得分:2)

这与应用验证的顺序有关。似乎在某种程度上,Angular使用指令名称的字母顺序来命令它们的执行。因此,smartFloat来自 required后的,而allEng来自之前的

通过更改指令执行的顺序,它们的解析器在$parsers堆栈中获得不同的位置。因此,在allEng情况下,您的指令(和解析器)会在require 之前执行。如果输入是错误的数字会怎么样?您的解析器返回undefined。这反过来会触发required解析器相信该值不存在 - 从而显示错误!

您可以使用指令的名称来验证此行为。

检查相关问题:Angularjs form validation order