So verarbeiten Sie sehr große Formularbeispiele mit Vue+ElementUI

So verarbeiten Sie sehr große Formularbeispiele mit Vue+ElementUI

Aufgrund von Geschäftsanpassungen im Unternehmen hat sich die Logik des vorherigen superlangen Formulars in letzter Zeit stark geändert. Daher plane ich, es umzugestalten (es wurde zuvor von einem Backend-Mitarbeiter geschrieben, der das Unternehmen verlassen hat, und es gibt keine Kommentare. Eine Komponente umfasst mehr als 4.000 Zeilen, und mir fehlt wirklich die Energie, das zu tun). Der Einfachheit halber habe ich das Projekt in 14 Komponenten unterteilt und vereinfacht.

Gesamtidee

  • Große Formulare werden nach Geschäftsmodulen aufgeteilt
  • Verwenden Sie beim Speichern die von el-form bereitgestellte Validierungsmethode zur Überprüfung (durchlaufen Sie jede geteilte Komponente).
  • Mixin ist eine gemeinsame Extraktion aller Komponenten (fördert auch die Wartung späterer Projekte)

Start

Hier nehmen wir als Beispiel die Aufteilung zweier Komponenten: form1, form2 (der Einfachheit halber kritisieren Sie die Benennung bitte nicht).

Warum die beiden Komponenten hier an Form, Ref und Modell gebunden sind, wird später erklärt (zur Vereinfachung der späteren Wartung).

// form1-Komponente <template>
    <el-form
      ref="Formular"
      :model="Formular"
      Beschriftungsbreite = "10px"
    >
      <el-form-item label="Name" prop="Name">
          <el-input v-model="formular.name" />
      </el-form-item>
    </el-form>
</Vorlage>
<Skript>
Standard exportieren {
  Name: 'Form1',
    Requisiten: {
      bilden: {}
  },
  Daten() {
    zurückkehren {
      Regeln:
        Name: [
          { erforderlich: true, Nachricht: ‚Bitte geben Sie Ihren Namen ein‘, Auslöser: ‚unscharf‘ }
        ]
      }
    }
  },
  Methoden: {
    // Hier wird die übergeordnete Komponente in einer Schleife durchlaufen, um die Validierung aufzurufen validForm() {
        let result = false
        this.$refs.form.validate(valid => gültig && (Ergebnis = wahr))
        Ergebnis zurückgeben
    }
    // Ich habe es hier anders geschrieben, aber es ist ein Promise-Objekt beim Loopen und Prüfen. Da gibt es ein Problem. Ich hoffe, die Großen können mir einen Rat geben. validForm() {
        // Die Ausgabestruktur hier ist offensichtlich ein Boolescher Wert, aber nach dem Aufruf der Schleife der übergeordneten Komponente ist es ein Promise-Typ, der konvertiert werden muss. return this.$refs.form.validate().catch(e => console.log(e))
    }
  }
}
</Skript>
 
// form2-Komponente <template>
    <el-form
      ref="Formular"
      :model="Formular"
      Beschriftungsbreite = "10px"
    >
      <el-form-item label="Alter" prop="Alter">
          <el-input v-model="form.age" />
      </el-form-item>
    </el-form>
</Vorlage>
<Skript>
Standard exportieren {
  Name: 'Form2',
  Requisiten: {
      bilden: {}
  },
  Daten() {
    zurückkehren {
      Regeln:
        Name: [
          { erforderlich: true, Nachricht: ‚Bitte geben Sie Ihr Alter ein‘, Auslöser: ‚unscharf‘ }
        ]
      }
    }
  },
  Methoden: {
    // Hier wird die übergeordnete Komponente in einer Schleife durchlaufen, um die Validierung aufzurufen validForm() {
        let result = false
        this.$refs.form.validate(valid => gültig && (Ergebnis = wahr))
        Ergebnis zurückgeben
    }
  }
}
</Skript>

Sehen Sie, wie auf die übergeordnete Komponente verwiesen wird

// Übergeordnete Komponente <template>
    <div Klasse="übergeordnet">
        <form1 ref="form1" :form="formData.form1" />
        <form2 ref="form2" :form="formData.form2" />
        <el-button type="primary" @click="save">Fehler</el-button>
    </div>
</Vorlage>
<Skript>
... unter Weglassen der Referenz export default {
    Name: "Elternteil",
    ... Registrierungsdaten weglassen () {
        zurückkehren {
            formData: {
                form1: {},
                form2: {}
            }
        }
    },
}
</Skript>

Da die Attributnamen form1 und form2 in formData jeweils im Ref der Subform-Komponente verwendet werden, können diese beim Durchlaufen nacheinander gefunden und die Speicherfunktion geändert werden. Der Code lautet wie folgt:

Methoden: {
    speichern () {
        //Der Schlüsselwert jedes Formularobjekts, d. h. der Referenzwert jedes Formulars const formKeys = Object.keys(this.formData)
        // Führen Sie die Validierungsmethode für jedes Formular aus const valids = formKeys.map(item => this.$refs[item].validForm())
        // Logik, nachdem alle Formulare die Validierung bestanden haben, if (valids.every(item => item)) {
          konsole.log(11)
        }
    }
}

Warum sind sowohl Ref- als auch Modellkomponenten an das Formular gebunden?

  • Durch Vergleich können wir feststellen, dass Form1 und Form2 gemeinsame Props-Methoden haben.
  • Lassen Sie es uns durch Mixin extrahieren
Standard exportieren {
  Requisiten: {
    bilden: {
      erforderlich: wahr,
      Typ: Objekt,
      Standard: () => {}
    },
  },
  Methoden: {
    gültigeForm () {
      let result = false
      this.$refs.form.validate(valid => gültig && (Ergebnis = wahr))
      Ergebnis zurückgeben
    }
  }
}

Referenzieren Sie den Minix in Form1 und Form2 und löschen Sie die entsprechenden Eigenschaften und Methoden in den entsprechenden Komponenten.

Abschluss

  • Es ist sehr mühsam, das Problem übergroßer Formulare zu lösen. Hier teilen wir einfach die Komponenten
  • Auch die Verknüpfung der Komponenten stellt eine große Schwierigkeit dar. Ich werde sie das nächste Mal posten, wenn sie fertig ist.

Dies ist das Ende dieses Artikels darüber, wie Vue+ElementUI mit sehr großen Formularen umgeht. Weitere Informationen darüber, wie Vue+ElementUI mit sehr großen Formularen umgeht, finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Vue-Grundlagen: Detaillierte Erklärung der ElementUI-Form
  • Detaillierte Erläuterung der verschachtelten Tabelle im Vue-ElementUI-Formular und der Überprüfung jeder Zeile
  • Beispiel für die Implementierung eines Login-Effekts mit Vue-ElementUIs aus einem Formular
  • Vue ElementUI Form-Formularvalidierung
  • Implementierung der Validierungsregel für Vue Element-ui-Formulare
  • Detaillierte Erklärung zur Verwendung des Element-UI-Formulars in Vue2

<<:  Ein Beispiel für die Ausführungsreihenfolge zwischen dem href-Sprung und dem onclick des HTML-Hyperlinks a-Tag

>>:  Implementierung der Bereitstellung des Nginx+ModSecurity-Sicherheitsmoduls

Artikel empfehlen

Beispiel zum Überprüfen der Kapazität einer MySQL-Datenbanktabelle

Dieser Artikel stellt die Befehlsanweisungen zum ...

Mehrere Implementierungsmethoden der Tab-Leiste (empfohlen)

Registerkarten: Kategorie + Beschreibung Tag-Leis...

Der Unterschied zwischen Löschen, Abschneiden und Löschen und wie man wählt

Vorwort Letzte Woche fragte mich ein Kollege: „Br...

So verwenden Sie den Linux-Befehl whatis

01. Befehlsübersicht Der Befehl whatis sucht in e...

Implementierung des Imports und Exports von Docker-Images

Docker-Nutzung von Gitlab Gitlab Docker Startbefe...

Grundlegendes zu MySQL-Clusterindizes und wie Clusterindizes wachsen

In dieser Anmerkung beschreiben wir kurz Was ist ...

Eine kurze Analyse von Linux resolv.conf

1. Einleitung resolv.conf ist die Konfigurationsd...

Nginx-Überwachungsprobleme unter Linux

Nginx-Installation Stellen Sie sicher, dass die v...

Detaillierte Einführung in den MySql-Index und korrekte Verwendungsmethode

Detaillierte Einführung in den MySql-Index und ko...

Der Unterschied zwischen Docker Run und Start

Der Unterschied zwischen Ausführen und Starten in...

Beschreibung der Standardtransaktionsisolationsebene von MySQL und Oracle

1. Transaktionsmerkmale (ACID) (1) Atomarität. Di...