【发布时间】:2016-12-14 19:55:53
【问题描述】:
我的表格预填了user.email。如果用户使用原始user.email 以外的值填充FormControl 的字段,我希望仅启用编辑按钮。是否可以使用自定义验证器来做到这一点?
这是我的验证器:
import { FormControl } from '@angular/forms';
export class ChangedValidator {
static isValid(control: FormControl): any {
let initialValue = (' ' + control.value).slice(1);
if(initialValue === control.value){
return {
"changed": true
};
}
return null;
}
}
目的是克隆FormControl.value,但我意识到每次在FormControl中更改值时都会实例化这个类。
编写不可重用代码的一种非常hacky的方法是从存储它的数据provider中获取user.email,并使用它与FormControl.value进行比较。正如您可能猜到的那样,验证器仅适用于 User 对象的参数,而不适用于其他任何参数。
我想写一个通用的Validator 来检查表单的当前值是否与初始化的值不同。
编辑:
这是使用pristine 的一种方法,但并不完美。
import { FormControl } from '@angular/forms';
export class ChangedValidator {
static isValid(control: FormControl): any {
if(control.pristine){
return {
"unchanged": true
};
}
return null;
}
}
【问题讨论】:
-
如果
pristine不够好(检查值是否已更改,而不是是否已更改并恢复为原始值),那么,是的,您可以在其中发送初始值的自定义验证器值作为参数。 -
@silentsod
pristine可能“足够好”,但如果可能的话,你能告诉我如何发送它吗?我查看了另一个线程,但是当我尝试时,这些解决方案都不适合我。
标签: angular