Проверка AngularJS, которая зависит от других значений свойства области

Я пытаюсь реализовать проверку с помощью AngularJS. У меня есть список входов, привязанный к списку объектов в области, и я хочу убедиться, что значение в каждом входе больше или равно значению во входе перед ним (давайте предположим, что я вводю только числовые значения в входы)

Это означает, что при изменении значения необходимо проверить, что:

  • Новое значение по-прежнему больше или равно предыдущему элементу (если не первый элемент в списке)
  • Последующий элемент списка (если он есть) все еще больше или равен вновь измененному значению

Я не уверен в лучшем способе сделать это, но я бы предпочел использовать среду проверки AngularJS в максимально возможной степени. Я вижу 3 возможных решения:

1. Создайте пользовательскую директиву для проверки

Я нашел примеры, которые делают это, но у меня есть 2 вопроса здесь:

  • Как бы вы получили доступ к свойствам области относительно области?
    собственность в настоящее время проверяется?
  • Если, например, изменено входное значение, привязанное к индексу 1, можно ли вызвать директиву для переоценки входного значения, привязанного к индексу 2, так как изменение значения в индексе 1 может сделать его недействительным? До сих пор я видел, что директивная функция срабатывает только для только что изменившихся привязок.

2: Используйте UI-валидацию

В этом случае я смог добавить индекс элемента списка в функцию проверки. Таким образом, это означало, что я мог получить доступ к значению предыдущего элемента списка для оценки. Но у меня все еще была проблема, что он срабатывал только для элемента, который только что изменился - следующий элемент в списке не был переоценен.

3: Реализовать обработчик события onChange для каждого связанного входного значения

У меня есть jsFiddle для этого:

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

Но в этом случае я не знаю, как вызвать функцию $setValidity, если все, что у меня есть, - это базовое свойство scope. Код ниже не работает:

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

Я предполагаю, что смогу реализовать его, используя этот 2-й метод, вообще не касаясь инфраструктуры проверки AngularJS - но если есть "правильный" способ, который его использует, то я бы хотел знать...

1 ответ

Вам нужно пройти row переменная для функции проверки и установите для нее проверку. Вот пример: http://jsfiddle.net/fH755/

Другие вопросы по тегам