在Angular 7中,我有以下代码:
this.formGroup = this.formBuilder.group({
id: [],
name: ['', [Validators.required], this.validateSomething.bind(this)],
});
然后我做一些事情,最后用从数据库中获取的对象myObject
初始化值,并且我知道它不会破坏任何验证:
this.formGroup.setValue({
id: myObject.id,
name: myObject.name
}, {
emitEvent: false
});
我的validateSomething
非常复杂,我想在最初的setValue
中并没有节省一些计算。
我找到了函数setValidators()
,我认为我可以做类似的事情:
this.formGroup = this.formBuilder.group({
id: [],
name: ['', [Validators.required]],
});
this.formGroup.setValue({
id: myObject.id,
name: myObject.name
}, {
emitEvent: false
});
this.formGroup.controls.name.setValidator(validateSomething.bind(this));
但是它不起作用。验证根本不起作用了。
有什么主意吗?谢谢!
答案 0 :(得分:1)
在验证方法validateSomething
中,您可以在验证之前检查该字段是touched
和/还是dirty
。
类似的东西:
this.myForm.get('name').touched && this.myForm.get('name').dirty
。