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

angular - วิธีส่งเฉพาะส่วนที่เปลี่ยนของฟอร์ม


ฉันมีกลุ่มฟอร์มแล้วฉันจึงทำการจับค่าบนฟอร์มไปยังประเภทอ็อบเจ็กต์ของฉันเพื่อทำคำขอแก้ไขรายการ

แบบฟอร์ม :

  public companyForm = new FormGroup(
    {
      generalInfo: new FormGroup({
        name: new FormControl('', [Validators.required, Validators.maxLength(this.maxLength)]),
        active: new FormControl(false)
      }),
      address: new FormGroup({
        street: new FormControl('', [Validators.required, Validators.maxLength(this.maxLength)]),
        streetNumber: new FormControl('', [Validators.required]),
        postalCode: new FormControl('', [Validators.required]),
        city: new FormControl('', [Validators.required]),
        country: new FormControl('', [Validators.required])
      })
   })

วัตถุ CompanyEdit:

      name: formValue.generalInfo.name,
      active: formValue.generalInfo.active,
      address: {
        street: formValue.address.street,
        city: formValue.address.city,
        streetNumber: formValue.address.streetNumber,
        postalCode: formValue.address.postalCode
      },
      country: formValue.address.country

ชื่อฟิลด์และวิธีการจัดลำดับซ้อนของพวกมันไม่เข้ากัน ในขณะที่แก้ไข ฉันชอบส่งเฉพาะคอนโทรลที่เปลี่ยนแปลงบนฟอร์ม วิธีที่ดีที่สุดในการได้มาซึ่งคอนโทรลที่สกปรกและแมปพวกมันไปยังประเภทวัตถุของฉันคืออะไร?

คำตอบ #1

คุณสามารถตรวจสอบฟอร์มได้ว่ามีค่าที่สกปรกในฟอร์มกรุปหรือไม่

มีคำตอบจากคำถามที่คล้ายกันใน URL ของ StackOverflow ฉันจะคัดลอก/วางโค้ดมาที่นี่ให้คุณ

  getDirtyValues(form: any) {
        let dirtyValues = {};

        Object.keys(form.controls)
            .forEach(key => {
                const currentControl = form.controls[key];

                if (currentControl.dirty) {
                    if (currentControl.controls)
                        dirtyValues[key] = this.getDirtyValues(currentControl);
                    else
                        dirtyValues[key] = currentControl.value;
                }
            });

        return dirtyValues;
}