我有一个简单或非常奇怪的问题:
在角形官方表格教程中,有一个“自定义验证”部分:
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,没有运气
这是一个错误吗?有人给我一个暗示吗?
答案 0 :(得分:2)
这与应用验证的顺序有关。似乎在某种程度上,Angular使用指令名称的字母顺序来命令它们的执行。因此,smartFloat
来自 required
后的,而allEng
来自之前的。
通过更改指令执行的顺序,它们的解析器在$parsers
堆栈中获得不同的位置。因此,在allEng
情况下,您的指令(和解析器)会在require
之前执行。如果输入是错误的数字会怎么样?您的解析器返回undefined
。这反过来会触发required
解析器相信该值不存在 - 从而显示错误!
您可以使用指令的名称来验证此行为。