AngularJS验证依赖于其他范围属性值

时间:2014-02-19 12:36:54

标签: angularjs angularjs-directive ui-validate

我正在尝试使用AngularJS实现一些验证。我有一个输入列表绑定到作用域中的对象列表,我想确保每个输入中的值大于或等于它之前的输入中的值(假设我只输入数值到输入)

这意味着当一个值改变时,需要检查:

  • 新值仍然大于或等于上一项(如果不是列表中的第一项)
  • 后续列表项(如果有)仍然大于或等于新更改的值

我不确定解决此问题的最佳方法,但我更愿意尽可能使用AngularJS验证框架。我看到了3种可能的解决方案:

1:创建自定义指令以执行验证

我找到了这样做的例子,但我在这里有两个问题:

  • 您如何访问范围属性 relative 到范围
    目前正在验证的财产?
  • 例如,如果输入值绑定在索引1处,则为 更改后,是否可以触发指令重新评估输入值绑定 在索引2处,因为更改索引1处的值可能已使其无效? 到目前为止,我已经看到只触发了一个指令函数 刚刚改变的绑定。

2:使用ui-validation

在这种情况下,我能够将列表项的索引提供给验证功能。所以,这意味着我可以访问上一个列表项的值以进行评估。但我仍然遇到的问题是,它只针对刚刚更改的项目触发了 - 列表中的下一个项目没有重新评估。

3:在每个绑定的输入值

上实现onChange事件处理程序

我有一个jsFiddle这个:

http://jsfiddle.net/zs9kJ/1/

但是在这种情况下,我不知道如何调用$ setValidity函数,如果我有一个句柄就是底层范围属性。以下代码失败:

            if (eval($scope.items[i].value) < eval($scope.items[i - 1].value)) {
                $scope.items[i].$setValidity('notinorder', false);
            }

我想我可以使用第二种方法实现它,而根本不涉及AngularJS验证框架 - 但是如果有一种'正确'方式可以使用它,那么我很想知道......

1 个答案:

答案 0 :(得分:0)

您需要将row变量传递给验证函数并对其进行验证。 这是一个例子: http://jsfiddle.net/fH755/