Проверка AngularJS, которая зависит от других значений свойства области
Я пытаюсь реализовать проверку с помощью AngularJS. У меня есть список входов, привязанный к списку объектов в области, и я хочу убедиться, что значение в каждом входе больше или равно значению во входе перед ним (давайте предположим, что я вводю только числовые значения в входы)
Это означает, что при изменении значения необходимо проверить, что:
- Новое значение по-прежнему больше или равно предыдущему элементу (если не первый элемент в списке)
- Последующий элемент списка (если он есть) все еще больше или равен вновь измененному значению
Я не уверен в лучшем способе сделать это, но я бы предпочел использовать среду проверки AngularJS в максимально возможной степени. Я вижу 3 возможных решения:
1. Создайте пользовательскую директиву для проверки
Я нашел примеры, которые делают это, но у меня есть 2 вопроса здесь:
- Как бы вы получили доступ к свойствам области относительно области?
собственность в настоящее время проверяется? - Если, например, изменено входное значение, привязанное к индексу 1, можно ли вызвать директиву для переоценки входного значения, привязанного к индексу 2, так как изменение значения в индексе 1 может сделать его недействительным? До сих пор я видел, что директивная функция срабатывает только для только что изменившихся привязок.
2: Используйте UI-валидацию
В этом случае я смог добавить индекс элемента списка в функцию проверки. Таким образом, это означало, что я мог получить доступ к значению предыдущего элемента списка для оценки. Но у меня все еще была проблема, что он срабатывал только для элемента, который только что изменился - следующий элемент в списке не был переоценен.
3: Реализовать обработчик события onChange для каждого связанного входного значения
У меня есть jsFiddle для этого:
Но в этом случае я не знаю, как вызвать функцию $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/