Validate formly angularjs字段不相同
我在单击时动态添加了字段Validate formly angularjs字段不相同,angularjs,angular-formly,Angularjs,Angular Formly,我在单击时动态添加了字段 addNewFiled() { let parent = this; this.scope.fields.push({ key: 'field-'+parent.scope.fields.length, type: 'horizontalInput', templateOptions: { placeholder :'E
addNewFiled() {
let parent = this;
this.scope.fields.push({
key: 'field-'+parent.scope.fields.length,
type: 'horizontalInput',
templateOptions: {
placeholder :'Enter Field',
label: 'Filed',
required: false
},
validators: {
fieldFormat: function($viewValue, $modelValue, scope) {
let value = $viewValue;
if(value.length != 12){
scope.to.message = "Field should be 12 characters";
return false;
}
return true;
}
}
});
}
我需要的是验证输入的值是否不在验证器的另一个字段中,我尝试在模型中循环,但效率不高,非常感谢任何帮助。我曾经遇到过这种情况,我使用2个映射解决了这个问题 基本上,您将有2个映射,其中一个将包含映射到其值的字段索引,第二个映射将包含映射到该值的重复次数的字段值 在验证器中,减少先前值的重复次数(在完成其他验证之后),增加新值的重复次数,并检查其是否大于1,然后重复 在对话框中定义两个贴图
private valuesMap: any = [];
private keysArray:any = [];
在字段中,插入控制器以保存当前字段的索引
controller: function ($scope) {
$scope.index = parent.scope.fields.length-1;
parent.keysArray[$scope.index] = $scope.index;
},
然后在你的验证器中
if(value) {
if(angular.isDefined(parent.valuesMap[parent.keysArray[scope.index]])) {
parent.valuesMap[parent.keysArray[scope.index]]= parent.valuesMap[parent.keysArray[scope.index]] -1;
}
parent.keysArray[scope.index] = value;
if(angular.isDefined(parent.valuesMap[value]) && parent.valuesMap[value] > 0) {
parent.valuesMap[value] = parent.valuesMap[value]+1;
scope.to.message = "Value is already entered";
return false;
}
parent.valuesMap[value] = 1;
}
希望这适用于您的场景您不需要验证程序,通过templateOptions中的minlength和maxlength属性,已经存在字段长度的默认验证 只需这样做:
templateOptions: {
placeholder :'Enter Field',
label: 'Filed',
required: false,
minlength: 12,
maxlength: 12
},
谢谢,我将尝试此解决方案我知道,但我这样做是为了指定我自己的消息,问题不是长度,而是验证所有字段是否都不相同为什么会被否决?答案是正确的。我整天都在里面工作,我很清楚我在说什么。您只需在字段上放置一个监视程序即可完成此操作。它将检查两个或多个字段中是否存在相同的值?老实说,最简单的方法是将其他值添加到数组中,然后查看数组是否包含$viewValue,如果它在验证器中返回false,那么现在你看到这个答案不是针对这个问题的,基本上这个方法与我在问题中提到的方法相同,我说它没有效率,因为验证器是在每个键按下时触发的,你需要一个恒定的访问时间,如果你看到他设法做到这一点的被接受的答案