Почему угловой пользовательский валидатор вызывается дважды при начальной загрузке страницы и как это предотвратить?

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

Я добавил консольный журнал в пользовательскую функцию проверки и проверил, она вызывается дважды.

taskSelectionInJobValidation(formctrl:FormControl) {
if(formctrl.value == true){
  this.tasksInJobCount ++;
} else{
  this.tasksInJobCount --;
}
console.log(this.tasksInJobCount);
if (this.tasksInJobCount < 1) {
  return {
    valid : false
  }
}
return null;

}

Пользовательская функция валидатора должна вызываться один раз, она вызывается дважды, и я хочу, чтобы этот вызов вызывался только один раз при загрузке страницы.

1 ответ

Обычно проверка запускается дважды - один раз при потере фокуса ввода при нажатии кнопки "Обновить" (вход теряет фокус до срабатывания события нажатия кнопки "Обновить") и один раз для проверки всех входов в редакторе всплывающих окон после нажатия кнопки "Обновить". Кнопка (это поведение нельзя предотвратить). В текущем случае я бы предложил использовать событие сохранения сетки для отображения пользователю подтверждающего сообщения или реализовать пользовательский код для отслеживания того, какая проверка запускается - при потере фокуса ввода или нажатии кнопки "обновить".

призвание enableProdMode() до bootstrap() следует исправить это:

import {enableProdMode} from "angular2/core";

enableProdMode();

По умолчанию Angular2 выполняется в devMode, где обнаружение изменений всегда выполняется дважды, чтобы проверить нестабильность модели, которая указывает на ошибку в вашем приложении (которая выдает сообщение об ошибке. Выражение "xxxx" было изменено после его проверки).

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