2017-10-08 40 views
0

沒有工作,我有我想一次驗證FormArray,其字段。我遍歷FormArray和每個元件(FormGroup),我檢查條件,則禁用有效FormGroup s到避免用戶改變它和設定錯誤到特定FormControlFormGroup內部。角:setErrors內循環

以下是我的代碼。 rowsFormArray

response.forEach((item, index) => { 
    if (item.detailName.valid && item.detailNo.valid) 
     (<FormArray>this.detailForm.get('rows')).at(index).disable({ 
      onlySelf: true 
     }); 
    else if (!(item.detailName.valid && item.detailNo.valid)) 
     if (!!item.detailName.value && !item.detailNo.value) 
      this.detailForm.get(['rows', index, 'detailName']).setErrors({ 
       'invalidValue': true 
      }); 
     else 
      this.detailForm.get(['rows', index, 'detailNo']).setErrors({ 
       'invalidValue': true 
      }); 
}); 

錯誤未按預期設置。該控件顯示爲VALID如果我是console.log它。

更新:包裝它setTimeout它的工作。

+0

我不知道它是否涉及到這個問題,但在第7行的條件永遠不會執行 –

+0

爲什麼不呢?我正在檢查值是否存在(不是「」),它的工作原理。 – karthikaruna

+0

Ops,對不起我讀「有效」代替「價值」 –

回答

1

,它的發生是因爲你設置裏面OnInit鉤驗證。當Angular將控件放置在視圖中時,它會重新運行驗證器,從而消除您設置的錯誤。

這裏的a demo通過使用AfterViewInit鉤解決此問題的作品。該代碼還包含在setTimeout調用中以避免ExpressionChangedAfterChecked錯誤。

我個人這種行爲不同意,有一個open issue吧,這樣你的貓跟蹤。