ค้นหาเว็บไซต์

javascript - การแปลง FormArray เป็นอาร์เรย์ใน Angular


ฉันมี FormArray ของ FormGroups ฉันต้องการวนลูปผ่าน FormArray และตรวจสอบว่า FormGroups ใดบ้างที่ถูกต้อง อย่างไรก็ตามฉันไม่สามารถทำได้เพราะฉันไม่สามารถวนลูปผ่าน FormArray ได้เนื่องจากมันไม่ใช่ประเภท Array หรือ string หลักการของฉันคือพยายามแปลง FormArray เป็น Array ถ้าเป็นไปได้ อย่างไรก็ตามฉันไม่ทราบไวยากรณ์ใน TypeScript สำหรับสิ่งนี้

 this.applicationFormArray = new FormArray([
            this.selectAppFormGroup = new FormGroup({
            }),
            this.generalAppFormGroup = new FormGroup({
            }),
            this.fileModeFormGroup = new FormGroup({
            }),
            this.accessListFormGroup = new FormGroup({
            }),
        ]);

checkValidity() {
        var foo = this.applicationFormArray as Array<>;
        for(var element of this.applicationFormArray){
            if(element.valid) {
                //do something
            }
        }

คำตอบ #1

คุณสามารถแปลง FormArray ให้เป็น Array ปกติได้ด้วย property value ของ FormArray นี่คือสิ่งที่ใช้ได้ผลสำหรับฉัน การใช้ property value บน FormGroup จะคืนค่าเป็น object literal และบน FormArray จะคืนค่าเป็น array

let newArr = this.applicationFormArray.value
newArr.map(...)

ในตัวอย่างของคุณมันจะดูเหมือนแบบนี้:

var foo = this.applicationFormArray.value;
for(var element of foo){
   if(element.valid) {
       //do something
    }
}

คำตอบ #2

คุณสามารถใช้ map ร่วมกับ length ของ FromArray และเมธอด at:

let array = new Array(this.applicationFormArray.length)
    .map((v, index) => this.applicationFormArray.at(index) as FormGroup);

แม้ว่ารุ่นสำหรับก็ไม่เลวร้ายเกินไปเช่นกัน:

for (let i =0;i< this.applicationFormArray.length;i++) {
    const element = this.applicationFormArray.at(i);
    if (element.valid) {
        //do something
    }
}