angular - 是否可以使 Angular ReactiveForm ValidatorFn 设置错误几秒钟?
问题描述
我正在尝试写ValidatorFn
来检查表单的控件是否有重复项。
我已经编写了一个验证器来检查它并返回一个错误,但是这个验证器可以在几秒钟后删除这个错误吗?我知道如何从组件中创建它,但我想编写一次并使用此验证器重用所有控件
export function tagDuplicates(): ValidatorFn {
return (control: AbstractControl): ValidationErrors | null => {
if (!(control.dirty || control.touched) || !control.value) {
return null;
} else {
const values = [...control.value].map(reduceString);
if (values.some((el: string, index: number) => values.indexOf(el) !== index)) {
control.value.pop();
return { duplicate: `Item already added` };
}
return null;
}
};
}
function reduceString(str: string): string {
return str.toLocaleLowerCase().replace(/[ ,.]/g, '');
}
解决方案
你有控制权,所以你可以使用 Rxjs 的计时器使用 setErrors(null)
import {timer} from 'rxjs'
...
if (values.some((el: string, index: number) => values.indexOf(el) !== index)) {
timer(5000).subscribe(res=>{
control.setErrors(null)
})
return { duplicate: `Item already added` };
}
推荐阅读
- python - 如何通过实际改组所有元素来改组列表列表?
- r - 缩进 R Markdown 块(PDF 输出)
- sql - 如何在 SQL 中使用数据透视表添加列
- javascript - element.innerHTML 在 Javascipt 中没有给出预期的结果
- php - 在 wamp 中安装 wordpress 时面临的问题
- flutter - Flutter-web 持久登录
- php - 仅在 WordPress 中显示顶级类别
- pine-script - PineScript:常量字符串数组或如何使用数组成员调用 security()
- php - 我不能在 php prepare 语句中插入超过 7 列
- r - 使用 case_when,如何改变嵌套向量的新列表列?