Я могу легко проверить, удовлетворяет ли массив каким-либо правилам проверки. Проблемы возникали, когда я хотел взаимодействовать с определенными элементами управления в массиве форм.
У меня есть массив форм, который содержит группы форм. Каждая группа форм имеет несколько элементов управления формами.
Группа выглядит так:
const rowGroup = new FormGroup({
'range': new FormControl(row.range, [Validators.required, CustomValidators.range([1, 10000])]),
'multifamily': new FormControl(row.multifamily, [Validators.required, Validators.min(0), CustomValidators.range([0, 10000])]),
'office': new FormControl(row.office, [Validators.required, Validators.min(0), CustomValidators.range([0, 10000])]),
'retail': new FormControl(row.retail, [Validators.required, Validators.min(0), CustomValidators.range([0, 10000])]),
'other': new FormControl(row.other, [Validators.required, Validators.min(0), CustomValidators.range([0, 10000])])
});
Массив формы содержит группы и ascendingValidation
функцию, которая выполняет проверку. Группы добавляются динамически, и их количество не ограничено.
const array = new FormArray([rowGroup], ascendingValidation);
Результатом на странице будет сетка:
Форма должна выполнять проверку в порядке возрастания в столбце «Верхний предел диапазона LTV (%)».
Пример (я всегда говорю о столбце «Верхний предел диапазона LTV (%)»):
- Первый случай: если пользователь изменит значение в первой строке на 44, а не на 41, то это поле (элемент управления формой) будет недействительным, поскольку пользователь нарушает порядок возрастания. Я хотел бы отображать сообщение об ошибке только в первой строке, потому что пользователь изменил это значение.
- Второй случай: если пользователь изменяет вторую строку и добавляет 40 вместо 43, это поле должно быть недействительным. Я хотел бы отображать только сообщение об ошибке в поле второй строки.
- Третий случай: если пользователь добавляет 45 в первую строку вместо 41, в этом поле должно отображаться сообщение об ошибке. Если пользователь добавляет 46 во вторую строку вместо 43, тогда необходимо удалить ошибку в первой строке, потому что выполняется порядок возрастания.
ПРОБЛЕМА:
Я использую проверку на уровне массива форм. Моя проблема не в том, как реализовать алгоритм проверки того, является ли массив возрастающим и какие значения не находятся в порядке возрастания. Это самая легкая часть.
В рамках проверки массива форм я могу получить доступ ко всем элементам массива при изменении значений. На самом деле я не знаю, какой элемент управления был изменен в последний раз.
Как определить, какой элемент управления вызвал изменение значений в валидаторе массива форм?
Есть ли лучший способ сделать такую проверку?
ngFor
. Вопрос в том, как я могу определить элемент управления, изменяющий значение излучения? - person kat1330   schedule 25.01.2018input
s вы можете добавить(change)="checkChange($event)"
, который даст вам$event.target
и обнаружит отдельные изменения. ИспользованиеViewChild
- еще один вариант обнаружения изменений, но общая идея остается прежней. Надеюсь это поможет! - person Z. Bagley   schedule 26.01.2018