Почему угловой пользовательский валидатор вызывается дважды при начальной загрузке страницы и как это предотвратить? - PullRequest
0 голосов
/ 01 июля 2019

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

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

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 Ответ

0 голосов
/ 01 июля 2019

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

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

import {enableProdMode} from "angular2/core";

enableProdMode();

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...