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

Möglichkeiten zur Verbesserung der MongoDB-Leistung

MongoDB ist eine Hochleistungsdatenbank, bei der ...

MySQL-Datenbank muss SQL-Anweisungen kennen (erweiterte Version)

Dies ist eine erweiterte Version. Die Fragen und ...

Detaillierte Erläuterung der Anwendungsbeispiele für Vue-Router 4

Inhaltsverzeichnis 1. Installieren und erstellen ...

Javascript-Bereich und Abschlussdetails

Inhaltsverzeichnis 1. Geltungsbereich 2. Geltungs...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 8.0.14

Dieser Artikel dokumentiert den Installations- un...

So installieren Sie die Linux-Onlinesoftware gcc online

Befehle zur Linux-Onlineinstallation: yum install...

Lösung für die lange Verzögerung der MySQL-Datenbank-Master-Slave-Replikation

Vorwort Die Verzögerung der MySQL Master-Slave-Re...

HTML-Hyperlinks im Detail erklärt

Hyperlink Hyperlinks sind die am häufigsten verwen...

Centos7 installiert mysql5.6.29 Shell-Skript

In diesem Artikel wird das Shell-Skript von mysql...

Verstehen Sie das elastische CSS3 FlexBox-Layout in 10 Minuten

Grundlegende Einführung Merkmale Flexbox ist ein ...

Detailliertes Tutorial zur Installation und Deinstallation von MySql

In diesem Artikel finden Sie das Tutorial zur Ins...

So richten Sie geplante Sicherungsaufgaben in Linux CentOS ein

Implementierungsvorbereitung # Der Dateipfad muss...