Javascript AngularJS中具有依赖字段的表单验证
我有一个对象有两个字段,而1应该小于或等于另一个字段 假设是HDD配额设置,我需要Javascript AngularJS中具有依赖字段的表单验证,javascript,angularjs,validation,angular-ui,Javascript,Angularjs,Validation,Angular Ui,我有一个对象有两个字段,而1应该小于或等于另一个字段 假设是HDD配额设置,我需要阈值小于或等于HDD的大小 我试着用angular的 这就是我到目前为止的进展:(我希望链接能起作用) 我遇到的问题是,它朝一个方向工作: 设置大小然后玩阈值可以正常工作 但是,如果我尝试更改大小,在阈值处于无效状态后,什么也不会发生。这是因为未在模型上设置无效的阈值,并且将大小id与空或未定义(或类似内容)进行比较 一方面,我理解不在模型上设置无效值的逻辑。。。但在这里,它妨碍了我 因此,如果您能帮助我完成这项工
阈值
小于或等于HDD的大小
我试着用angular的
这就是我到目前为止的进展:(我希望链接能起作用)
我遇到的问题是,它朝一个方向工作:
设置大小
然后玩阈值
可以正常工作
但是,如果我尝试更改大小
,在阈值
处于无效状态后,什么也不会发生。这是因为未在模型上设置无效的阈值
,并且将大小
id与空
或未定义
(或类似内容)进行比较
一方面,我理解不在模型上设置无效值的逻辑。。。但在这里,它妨碍了我
因此,如果您能帮助我完成这项工作,我们将不胜感激。我已经使用了自定义指令,并制作了一些适合我的案例的东西 在输入
阈值时,我有小于或等于=“quota.size”
指令,将要验证的模型属性传递给它(我希望quota.threshold
小于或等于quota.size
):
然后,解析器通过调用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
指令,所以只有当我有一个有效且已解析的数字时,我才能到达这里(对于我来说工作较少,但是对于文本
输入,我可能应该执行解析工作)
这里是我的游乐场:迟到总比不迟到好,你需要向表单输入元素添加ng model options=“{allowInvalid:true}”
,以阻止这种情况发生-问题是当承诺被拒绝时(例如使用$q
或$http
),默认情况下,模型不会更新。疯了吧!我花了一天时间来解决这个问题
我已经专门为这个问题写了一个plunkr-相信我,这段代码很好。。。
这里正在讨论这个问题:迟做总比不做好,您需要在表单输入元素中添加ng model options=“{allowInvalid:true}”,以阻止这种情况发生-问题是当$q服务拒绝响应时,默认情况下,模型不会更新。疯了吧!我花了一天时间来解决这个问题。
link: (scope, elem, attr, ctrl) ->
scope.$watch attr.lessThanOrEqual, (newValue) ->
ctrl.$setViewValue(ctrl.$viewValue)
ctrl.$parsers.push (viewValue) ->
newValue = ctrl.$modelValue
if not scope.thresholdValidate viewValue
ctrl.$setValidity('lessThanOrEqual', false)
else
ctrl.$setValidity('lessThanOrEqual', true)
newValue = viewValue
newValue