feat(forms): clear (remove all) components from a FormArray (#28918)
This method is a more convenient and efficient way of removing all components from a FormArray. Before it, we needed to loop the FormArray removing each component until empty. Resolves #18531 PR Close #28918
This commit is contained in:
parent
014841dfef
commit
a68b1a1894
|
@ -1895,6 +1895,43 @@ export class FormArray extends AbstractControl {
|
|||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove all controls in the `FormArray`.
|
||||
*
|
||||
* @usageNotes
|
||||
* ### Remove all elements from a FormArray
|
||||
*
|
||||
* ```ts
|
||||
* const arr = new FormArray([
|
||||
* new FormControl(),
|
||||
* new FormControl()
|
||||
* ]);
|
||||
* console.log(arr.length); // 2
|
||||
*
|
||||
* arr.clear();
|
||||
* console.log(arr.length); // 0
|
||||
* ```
|
||||
*
|
||||
* It's a simpler and more efficient alternative to removing all elements one by one:
|
||||
*
|
||||
* ```ts
|
||||
* const arr = new FormArray([
|
||||
* new FormControl(),
|
||||
* new FormControl()
|
||||
* ]);
|
||||
*
|
||||
* while (arr.length) {
|
||||
* arr.removeAt(0);
|
||||
* }
|
||||
* ```
|
||||
*/
|
||||
clear(): void {
|
||||
if (this.controls.length < 1) return;
|
||||
this._forEachChild((control: AbstractControl) => control._registerOnCollectionChange(() => {}));
|
||||
this.controls.splice(0);
|
||||
this.updateValueAndValidity();
|
||||
}
|
||||
|
||||
/** @internal */
|
||||
_syncPendingControls(): boolean {
|
||||
let subtreeUpdated = this.controls.reduce((updated: boolean, child: AbstractControl) => {
|
||||
|
|
|
@ -59,6 +59,20 @@ import {of } from 'rxjs';
|
|||
expect(a.controls).toEqual([c1, c3]);
|
||||
});
|
||||
|
||||
it('should support clearing', () => {
|
||||
a.push(c1);
|
||||
a.push(c2);
|
||||
a.push(c3);
|
||||
|
||||
a.clear();
|
||||
|
||||
expect(a.controls).toEqual([]);
|
||||
|
||||
a.clear();
|
||||
|
||||
expect(a.controls).toEqual([]);
|
||||
});
|
||||
|
||||
it('should support inserting', () => {
|
||||
a.push(c1);
|
||||
a.push(c3);
|
||||
|
|
|
@ -170,6 +170,7 @@ export declare class FormArray extends AbstractControl {
|
|||
readonly length: number;
|
||||
constructor(controls: AbstractControl[], validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null, asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null);
|
||||
at(index: number): AbstractControl;
|
||||
clear(): void;
|
||||
getRawValue(): any[];
|
||||
insert(index: number, control: AbstractControl): void;
|
||||
patchValue(value: any[], options?: {
|
||||
|
|
Loading…
Reference in New Issue