0

我在复选框上绑定了自定义验证器,并观察到自定义验证器在初始页面加载时被调用了两次,这导致了问题,因为我的验证器用于计算选中的复选框的数量,因为它被调用了两次,所以计数器值不正确。

我在自定义验证器功能中添加了控制台日志并检查,它被调用了两次。

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;

}

自定义验证器函数应该被调用一次,它被调用两次,我想防止它在页面加载时只调用一次。

4

1 回答 1

0

基本上验证会被触发两次——一次是在单击更新按钮时失去输入的焦点(在触发更新按钮单击事件之前输入失去焦点),一次是在按下“更新”后验证弹出编辑器中的所有输入" 按钮(无法阻止此行为)。在当前情况下,我建议使用网格的保存事件向用户显示确认消息或实施自定义代码来跟踪触发了哪个验证 - 当失去输入焦点或单击“更新”按钮时。

enableProdMode()之前调用bootstrap()应该修复它:

import {enableProdMode} from "angular2/core";

enableProdMode();

默认情况下,Angular2 在 devMode 下运行,其中更改检测总是运行两次以检查表明应用程序中存在错误的模型不稳定性(在检查后会产生错误消息 Expression 'xxxx' was changed)

于 2019-07-01T05:37:25.260 回答