我正在使用Angular 4.4.3反應窗體來實現窗體中一組控件的自定義驗證。方法AbstractControl.setErrors根據文檔更新AbstractControl的錯誤屬性,在其上調用它,更新其父項的狀態,但不更新父項錯誤屬性。我想在FormGroup實例上設置errors屬性,所以我使用FormGroup繼承的setErrors。但是,它不會按預期更新錯誤。在Angular Reactive Forms中的FormGroup實例上設置錯誤不能按預期方式工作
下面是我的示例代碼: 嘗試它FormControl情況下,不更新自己的錯誤,以及他們父母的有效性狀態(不是父母的錯誤,但!):
let myFormGroup
= this._formBuilder
.group({
ctrl1: [null],
ctrl2: [null]
},
{
validator: (fg: FormGroup) => {
let ctrl1 = fg.get('ctrl1'),
ctrl2 = fg.get('ctrl2'),
ctrl1Empty = !ctrl1.value,
ctrl2Empty = !ctrl2.value;
//Successfully sets ctrl1.errors and fg.status, but not fg.errors
if (ctrl1empty)
ctrl1.setErrors({ctrl1required: true});
//Successfully sets ctrl2.errors and fg.status, but not fg.errors
if (ctrl2Empty)
ctrl2.setErrors({ctrl2required: true});
//Doesn't work, doesn't update fg.errors
if (ctrl1Empty && ctrl2Empty)
fg.setErrors({required: true});
}
})
任何想法,爲什麼?
爲了進一步闡明:直接從驗證器返回錯誤(即'return {required:true}'),但仍然在'FormGroup'實例中'setErrors'的行爲不一致,它們是'AbstractControl'。 – Bahaa