AngularJS中带依赖字段的表单验证
Form Validation with Dependent Fields in AngularJS
我有一个对象,它有两个字段,其中一个应该小于或等于另一个。
假设这是HDD配额设置,我需要threshold
小于或等于HDD的size
。
我正在尝试使用angular的ui-utils#validate.
这是我如何得到到目前为止:http://embed.plnkr.co/EysaRdu2vuuyXAXJcJmE/preview(我希望链接将工作)
我遇到的问题是它在一个方向上工作:
设置size
,然后玩threshold
工作ok
但是如果我试图改变size
,在threshold
处于无效状态之后-什么都没有发生。这是因为在模型上没有设置无效的threshold
,并且将size
id与null
或undefined
(或类似的东西)进行比较。
一方面我理解在模型上不设置无效值的逻辑…但它却妨碍了我。
所以,任何帮助使这项工作将是感激的。
我已经使用了自定义指令,并为我的情况做了一些工作。
在我的输入threshold
我有less-than-or-equal="quota.size"
指令,传递它的模型的属性来验证(我希望quota.threshold
小于或等于quota.size
):
<input type="number" name="threshold"
ng-model="quota.threshold"
required
less-than-or-equal="quota.size" />
在lessThanOrEqual
指令的link
函数中,它开始观察quota.size
,当quota.size
改变时,它只是试图设置threshold
在模型上的当前视图值:
link: (scope, elem, attr, ctrl) ->
scope.$watch attr.lessThanOrEqual, (newValue) ->
ctrl.$setViewValue(ctrl.$viewValue)
然后是解析器,它通过调用scope.thresholdValidate(thresholdValue)
方法将候选值传递给它来进行验证。如果验证成功,该方法返回true
;如果验证成功,则返回新值,否则返回当前模型的值:
ctrl.$parsers.push (viewValue) ->
newValue = ctrl.$modelValue
if not scope.thresholdValidate viewValue
ctrl.$setValidity('lessThanOrEqual', false)
else
ctrl.$setValidity('lessThanOrEqual', true)
newValue = viewValue
newValue
我将解析器推到解析器集合,与大多数示例建议的不变相反,因为我希望角来验证required
和number
指令,所以只有当我有一个有效的和解析过的数字(对我来说工作更少,但对于text
输入,我可能应该做解析工作)
这是我的游乐场:http://embed.plnkr.co/EysaRdu2vuuyXAXJcJmE/preview
迟来总比不来好,你需要添加ng-model-options="{allowInvalid:true}"
到你的表单输入元素来阻止这种情况的发生-问题是,当一个承诺被拒绝(例如使用$q
或$http
)模型,默认情况下,不更新。疯了啊!我花了一天才算出来。
我专门为这个问题写了一个plunkr -相信我这个代码很好…http://embed.plnkr.co/xICScojgmcMkghMaYSsJ/preview
- 解析javascript表单验证器
- Jquery表单验证插件-如果选中复选框,如何在提交时执行某些操作
- 自定义表单验证和提交
- Javascript表单验证的缺点
- Jquery的表单验证不起作用
- 语义ui表单验证:图像url
- jQuery表单验证适用于Mozilla和Internet Explorer,但不适用于Chrome或Safari
- JavaScript表单验证-“;“错误”;不按需要工作
- Mailchimp内联表单验证不适用于JS加载的HTML
- jQuery/JS获胜't在表单验证后重定向
- jquery表单验证复选框错误显示
- javascript表单验证-数值和密码
- 我想知道如何在javascript中进行表单验证
- jQuery表单验证(如果==“执行此操作”)仅适用于第一次输入
- 使用记录保存的消息进行表单验证
- 表单验证工作不正常,在不检查条目的情况下继续
- 如何对未知表单元素进行表单验证
- 使用ajax、php和mysql进行表单验证
- JS表单验证未发生
- 表单验证jsphp路径