0

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

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

  • 新值仍然大于或等于前一项(如果不是列表中的第一项)
  • 后面的列表项(如果有的话)仍然大于等于新变化的值

我不确定解决这个问题的最佳方法,但我希望尽可能多地使用 AngularJS 验证框架。我看到了 3 种可能的解决方案:

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

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

  • 您将如何访问与 当前正在验证的范围属性相关的范围属性?
  • 例如,如果在索引 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 验证框架——但如果有一种“正确”的方式可以使用它,那么我很想知道......

4

1 回答 1

0

您需要将row变量传递给验证函数并为其设置验证。这是示例:http: //jsfiddle.net/fH755/

于 2014-02-19T12:52:35.073 回答