我在复选框上绑定了自定义验证器,并观察到在初始页面加载时自定义验证器被调用了两次,这引起了问题,因为我的验证器用于计数选中的复选框的数量,因为它被调用了两次,计数器值不正确
我在自定义验证器功能中添加了控制台日志,并进行了检查,它被两次调用。
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;
}
自定义验证器函数应该被调用一次,它被调用两次,并且我想防止在页面加载时仅调用一次。
答案 0 :(得分:0)
基本上,验证会触发两次-一次在单击“更新”按钮时失去输入的焦点(在触发“更新”按钮单击事件之前输入失去焦点),一次在按下后验证Popup编辑器中的所有输入“更新”按钮(无法避免此行为)。在当前情况下,我建议使用网格的save事件向用户显示确认消息,或实施自定义代码以跟踪触发了哪个验证-失去输入的焦点或单击“更新”按钮时。
在
enableProdMode()
之前调用bootstrap()
应该可以解决此问题:
import {enableProdMode} from "angular2/core";
enableProdMode();
默认情况下,Angular2在devMode中运行,在该模式中,更改检测始终运行两次,以检查表明应用程序中存在错误的模型不稳定性(检查后会生成错误消息“ xxxx”已更改)