Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS中具有依赖字段的表单验证_Javascript_Angularjs_Validation_Angular Ui - Fatal编程技术网

Javascript AngularJS中具有依赖字段的表单验证

Javascript AngularJS中具有依赖字段的表单验证,javascript,angularjs,validation,angular-ui,Javascript,Angularjs,Validation,Angular Ui,我有一个对象有两个字段,而1应该小于或等于另一个字段 假设是HDD配额设置,我需要阈值小于或等于HDD的大小 我试着用angular的 这就是我到目前为止的进展:(我希望链接能起作用) 我遇到的问题是,它朝一个方向工作: 设置大小然后玩阈值可以正常工作 但是,如果我尝试更改大小,在阈值处于无效状态后,什么也不会发生。这是因为未在模型上设置无效的阈值,并且将大小id与空或未定义(或类似内容)进行比较 一方面,我理解不在模型上设置无效值的逻辑。。。但在这里,它妨碍了我 因此,如果您能帮助我完成这项工

我有一个对象有两个字段,而1应该小于或等于另一个字段

假设是HDD配额设置,我需要
阈值
小于或等于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