0

配列であるFormArrayアイテムの反応形式のカスタムバリデーターを作成するには、角度4を使用しています。それは最初の負荷で動作しますが、配列に項目を追加してその項目を削除すると、Validator.requiredバリデーションは設定されません。有効性の変更後のFormArrayプロパティの有効性の更新

FromArray - メインcomponent.ts

this.appForm = this.formBuilder.group({ 
    option: this.formBuilder.array([]), 
    items: this.formBuilder.array([]) 
}); 

上> FormGroup

let customItemsValidator: Array<any> = item.selectType === 'custom' && item.required ? 
             [Validators.required] : []; 

return this.formBuilder.group({ 
    customItems: [[], customItemsValidator], 
}) 

メインフォームだから私は、フォームを構築することができ、それが100%に動作しますが、私は無効になっている送信ボタンを持っていますフォームが有効でなく、最初のロード時に、customItemsプロパティにアイテムを追加するまで、ボタンは無効のままです。追加されたアイテムを削除すると、まだ必要で値がないので無効にする必要があるにもかかわらず、送信ボタンはまだ有効になっています。

removeメソッド

selectOptionsCustomRemove(customItem, customIdx: number, idx: number) { 
    pullAt(this.items.at(idx).get('customItems').value, customIdx); 
} 

だから、項目を削除しますが、妥当性は、フォームに変更されません。

pullAtの後にupdateValueAndValidity()を試しましたが、これはうまくいきません。

答えて

0

[]という名前のプロパティを残したインデックスからただちにpullAtが削除されたため、空のままの配列からアイテムを削除したときに消えてしまいました。だから私はnullに配列を割り当てる必要があったので、バリデーションがトリガされます。

if (this.options.at(idx).get('customItems').value.length === 0) { 
     this.options.at(idx).patchValue({ customItems: null }) 
} 
関連する問題