Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度反应形式-编辑模式下的唯一字段验证程序_Angular - Fatal编程技术网

Angular 角度反应形式-编辑模式下的唯一字段验证程序

Angular 角度反应形式-编辑模式下的唯一字段验证程序,angular,Angular,我正在处理一个带有反应表单的Angular 8应用程序 我有一个带有一些控件的表单,我将其用于创建和更新操作: this.form=new FormGroup({ id:new FormControl({value:this.editMode?this.id:'',已禁用:false}[ 需要验证器, this.\u uniqueIdValidator.bind(this) ]), 标签:新FormControl(this.editMode?this.label:“”[ 需要验证器 ]) });

我正在处理一个带有反应表单的Angular 8应用程序

我有一个带有一些控件的表单,我将其用于创建和更新操作:

this.form=new FormGroup({
id:new FormControl({value:this.editMode?this.id:'',已禁用:false}[
需要验证器,
this.\u uniqueIdValidator.bind(this)
]),
标签:新FormControl(this.editMode?this.label:“”[
需要验证器
])
});
id
控件有一个自定义验证器来检查其唯一性:

private\u唯一验证程序(控件:FormControl){
if(this.collection.findIndex(item=>item.id==control.value)>-1){
返回{duplicate:true};
}否则{
返回null;
}
}
现在,添加新项目时,一切正常。 但是,当我在编辑模式下打开表单时,它会引发
duplicate
错误,并且我无法使用与以前相同的值保存项目。

我在验证器中添加了以下代码:

if(this.id!=''&&this.id===control.value){
//值相同,因此表单有效
返回null;
}
但我很好奇是否有其他方法来实现它

谢谢


例如: 假设我的数据收集是:

[
 {id: 'id1', label: 'Foo'},
 {id: 'id2', label: 'Bar'},
 {id: 'id3', label: 'Another'}
]

我想编辑带有
id3
的项目标签,我的表单会出现一个错误,id字段重复。

我只需在验证器中扩展if检查,以检查
此.id
(如果存在)是否与
控件.value不同/相同。我还将
findIndex
更改为
find

private\u唯一验证程序(控件:FormControl){
if(control.value!==this.id&&this.collection.find(item=>item.id==control.value)){
返回{duplicate:true};
}否则{
返回null;
}
}

性能方面,我会更改条件的顺序。如果
control.value!==此.id
false
无需搜索集合,因此最好跳过它,转到else语句。@Andreivector您完全正确,谢谢,根据提示更新了答案:)