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

标签 javascript angularjs angularjs-directive

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

在 Angular 官方表单教程中,有一节“自定义验证”:
http://docs.angularjs.org/guide/forms

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

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

但是如果你把指令名“smart-float”改成另一个,比如“all-eng”,就会出现一个小问题:
如果您输入的不是 float ,它会显示“必需”和“浮点”验证错误两者

我试过 Chrome 33、Firefox 27,没有成功
谷歌“angularjs 指令名称限制”,运气不好
谷歌“angularjs 指令名称 smart-float”,运气不好
将我的 angularjs 从 1.2.13 升级到 1.2.15,运气不好

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

最佳答案

这与应用验证的顺序有关。似乎在某些时候,Angular 正在使用指令名称的字母顺序来命令它们的执行。所以 smartFloat之后 需要,而 allEng之前

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

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

检查相关问题:Angularjs form validation order

关于javascript - angularjs - 自定义指令名称 "smart-float",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22840399/

相关文章:

javascript - 如何制作一个包含 ng-repeat 中使用的 div 的指令?

javascript - 如何使用 Angular 1.x 服务从一个组件更新另一个组件?

javascript - 有没有办法在 Angular 运行之前运行 Javascript 代码?

javascript - 将回调添加到 javascript while 循环

javascript - Safari 删除表单标签

javascript - 如何为react-datepicker将UTC日期转换为 "MM/DD/YYYY"?

javascript - 如何构建HTML模板并添加到DOM?

javascript - Angular - 带有动态模板的指令

javascript - 将方法从服务调用到 Controller 中

angularjs - 在有效模糊上调用函数