Vue+Element - benutzerdefinierte Abfragekomponente

Vue+Element - benutzerdefinierte Abfragekomponente

In diesem Artikel wird hauptsächlich das Vue-Projekt vorgestellt. Unter der Voraussetzung, dass Elemente eingeführt werden, werden die Komponenten zweimal gekapselt, um ein direktes Layout über Konfigurationselemente zu erreichen.

1. Abfragebedingungs-Komponentenbildung

In Kombination mit der Verwendung von EventBus.js ist die Ereignisübermittlung effizienter und verschiedene komplexe Lebenszyklusabhängigkeiten können vermieden werden.
Im Ordner components/dataForm wird dataForm.vue als Träger der Komponentensammlung verwendet und es werden Konfigurationselemente erstellt

1.1 dataForm-Codebeispiel

// dataForm.vue
<Vorlage>
  <el-Zeile>
    <input-form v-for="(item,index) in options" :key="'dataForm_'+index"> 
      <!-- Eingabefeld-->
      <Eingabeformular
        :Schlüssel="Index"
        v-if="Artikel.Typ == 'Eingabe'"
        :Daten='Artikel'
      ></Eingabeformular>
  </el-row>
</Vorlage>
<Skript>
importiere EventBus aus "@/assets/js/eventBus.js"
importiere InputForm "@/components/dataForm/InputForm"
Standard exportieren {
  Komponenten:
    Eingabeformular,
  },
  Requisiten: {
    /**
     * Formularkonfigurationselemente * @param {Object} Option Konfigurationsparameter wie folgt:
     * Typ: Formularelementtyp, Zeichenfolge, optionale Werteingabe
     */
    Optionen:
      Typ: Array,
      Standard() {
        zurückkehren [];
      },
    },
  },
  Daten() {
   zurückkehren {}
  },
  erstellt() {
   // Dies dient hauptsächlich dazu, das Anzeigen und Ausblenden anderer Unterkomponenten in der Dropdown-Box zu realisieren EventBus.$on("refreshDataForm", e => {
      diese.refreshDataForm(e);
    });
  },
  // Seitenzerstörungsereignis destruction beforeDestroy() {
    EventBus.$off("refreshDataForm")
    EventBus.$off("HandleClick")
  },
  Methoden: {
   // Formulardaten aktualisieren refreshDataForm(item) {
      let data = diese.Optionen
      Daten.fürJeden((e, i) => {
        wenn (Artikel.Typ == e.Typ && Artikel.Name == e.Name) {
          diese.Optionen[i] = Artikel
        }
      })
    },
    // Das Klickereignis der untergeordneten Komponente reagiert auf die übergeordnete Komponente und die Daten werden übertragen handleClick(data) {
     EventBus.$emit("HandleClick",Daten)
    },
    //Formatieren Sie die Formulardaten (Sie können überprüfen, ob die erforderlichen Elemente erforderlich sind)
    getDataForm() {
     let data = diese.Optionen
     let formObj = {}
     lass Fehler = ''
     versuchen {
      Daten.fürJedes(e => {
       wenn (e.Typ === ''Eingabe) {
        wenn (e.erfordern && !e.inhalt) {
         Fehler = 'Bitte eingeben' + e.label
         Fehler auslösen
        }
        formObj[e.name] = e.inhalt
       } sonst wenn (e.type === 'select' || e.type === 'dataSelect') {
        wenn (e.erfordern && !e.inhalt) {
         Fehler = 'Bitte wählen' + e.label
         Fehler auslösen
        }
        formObj[e.name] = e.inhalt
       } sonst wenn (e.type === 'date' || e.type === 'dataRadio') {
        wenn (e.erfordern && !e.inhalt) {
         Fehler = 'Bitte wählen' + e.label
         Fehler auslösen
        }
        formObj[e.beginName] = e.beginRegTime
        formObj[e.endName] = e.endRegTime
       } sonst wenn (e.type === 'image') {
        formObj[e.name] = e.datei || e.inhalt
       } sonst wenn (e.type === 'upload') {
        formObj[e.name] = e.datei || e.inhalt
        if (e.delFileName) { // Lösche die Anhangssammlung und den benutzerdefinierten Namen und den Standardnamen formObj[e.delFileName] = e.delFileIds.join(',')
        } anders {
         formObj['delFileName'] = e.delFileIds.join(',')
        }
       }
      })
      RückgabeformularObj
     } Fehler abfangen {
      this.$message({ Nachricht:Fehler, Typ: 'Fehler'})
     }
    }
  }
}

1.2 Untergruppe inputForm.vue

Hinweis: Die hier referenzierten Komponenten können auch einzeln von der Seite referenziert werden.

<Vorlage>
  <el-col>
    <el-col :span="data.boxSpan?data.boxSpan:boxSpan" v-if="!data.isHide">
     <el-col :span="data.infoSpan?data.infoSpan:infoSpan" >
      <el-col :span="data.infoSpan?data.infoSpan:infoSpan" v-if="data.labelSpan!=0">
       <label class="el-form-item_label" :class="{'erfordern': data.erfordern}" v-html="data.label"></label>
      </el-col>
      <el-col :span="data.contentSpan?data.contentSpan:contentSpan" v-if="data.contentSpan!=0">
       <el-input :class="{'base_textarea': data.textarea}" v-modle.trim="data.content" :type="data.textarea?'textarea':''" :disable="data.readOnly" :placeholder="setPlaceholder" maxlength="200"></el-input>
      </el-col>
     </el-col>
      <span v-text="Titel"></span>
    </div>
  </el-col>
</Vorlage>
<Skript>
Standard exportieren {
 Requisiten: {
  // Geben Sie die Eingabe ein Eingabefeldtyp: {
   Typ: Zeichenfolge,
   Standard: „Eingabe“
  },
  //Standard-Zaunlayout 8/24
  boxSpan: {
   Typ: Nummer,
   Standard: 8
  },
  // Standard-Zaunlayout 24/24
  infoSpan: {
   Typ: Nummer,
   Standard: 24
  },
  //Standard-Zaunlayout 8/24
  Spanne: {
   Typ: Nummer,
   Standard: 8
  },
  //Standard-Zaunlayout 16/24
  Inhaltsspanne: {
   Typ: Nummer,
   Standard: 16
  },
  /**
  * Name Schlüsselwort * Typ Formulartyp * Bezeichnung Formulartitel * Inhalt Formularinhalt * readOnly schreibgeschützt Standard nein * isHide versteckt Standard nein * Textbereich Texttyp Standard nein **/
  Daten: {
   Typ: Objekt,
   Standard() {
    zurückkehren []
   }
  }
 },
 berechnet: {
  setzePlatzhalter() {
   wenn(diese.Daten.NurLesezugriff && !diese.Daten.Inhalt) {
    zurückkehren ''
   } 
   return 'Bitte eingeben'
  }
 }
}
</Skript>
<Stilbereich>
 // Erforderlich style.require::after {
  Inhalt: '*';
  Farbe: rot;
 }
 // Flex-Layout-Titel vertikal zentriert.el-form-item__label {
  schweben: rechts;
  Rand unten: 0;
  Zeilenhöhe: 20px;
  Anzeige: Flex;
  Elemente ausrichten: zentrieren;
  Mindesthöhe: 40px;
 }
</Stil>

1.3 Verweis auf übergeordnete Seiten und deren Verwendung

<Vorlage>
  <el-Zeile>
    <Datenformular: Optionen = 'Sucharray', Ref = 'Sucharray'></Eingabeformular>
  </el-row>
</Vorlage>

<Skript>
 importiere EventBus aus "@/assets/js/eventBus.js"
 importiere DataForm "@/components/dataForm/dataForm"
 Standard exportieren {
  Komponenten:
   Datenformular
  },
  Daten() {
   zurückkehren {
    // Menükonfiguration abfragen searchArray: [
     {
      Name: "Personenname",
      Typ: "Eingabe",
      Bezeichnung: 'Benutzername',
      Inhalt: ''
     },
     {
      Name: 'personName2',
      Typ: "Eingabe",
      Bezeichnung: 'Benutzername 2',
      Inhalt: ''
     }
    ]
   }
  },
  erstellt() {
   // Auf Parameter der untergeordneten Komponente warten EventBus.$on('refreshDataForm', e => {
    diese.refreshDataForm(e)
   })
  },
  zerstört() {
   // Zerstöre den Unterkomponentenparameter, der auf EventBus.$off('refreshDataForm') lauscht.
  },
  Methoden: {
   // Auf Unterkomponentenoperationen warten refreshDataForm(e) {
    //Logikcode this.$forceUpdate()
   },
   //Datenabfrage handleQuery() {
     // Komponentenparameter abrufen und zum JSON-Format zurückkehren let searchArray = this.$refs.searchArray.getDataForm()
    // Wenn erforderliche Elemente vorhanden sind, ist der Rückgabewert null und ein Popup-Fenster wird angezeigt, wenn (!searchArray) {
     zurückkehren 
    }
    //Schnittstellenlogik abfragen}
  }
 }
</Skript>

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Vue implementiert eine Komponente zur dynamischen Abfrageregelgenerierung
  • Detaillierte Erklärung zur Verwendung der Vue-Komponente zum Abfragen von Daten nach Zeiträumen
  • Beispielcode für Fuzzy-Abfrage eines Vue-Eingabefelds
  • Vue implementiert die Fuzzy-Abfragemethode des Input-Eingabefelds
  • Vue.js implementiert die Paging-Abfragefunktion
  • Vue implementiert die Funktion, auf die Zeit zu klicken, um eine Zeitabfrage zu erhalten
  • Detailliertes Beispiel für eine Abfrageoperation in Vue.js
  • Verwenden des Vue.js-Frameworks zum Implementieren eines Abfragesystems für Zugfahrkarten (mit Quellcode)
  • Implementierung einer Paging-Abfragefunktion basierend auf vue.js
  • Beispielcode zur Implementierung einer Paging-Abfrage mit Bootstrap4 + Vue2

<<:  Detaillierte Erläuterung der MySQL 8.0-Richtlinie zum Ablauf von Passwörtern

>>:  Detaillierte Erläuterung zur Konfiguration des externen Tomcat-Servers in HBuilderX zum Anzeigen und Bearbeiten der JSP-Schnittstelle

Artikel empfehlen

Natives Javascript+CSS, um den Karusselleffekt zu erzielen

Dieser Artikel verwendet Javascript + CSS, um den...

Die Funktionen und Unterschiede zwischen deaktiviert und schreibgeschützt

1: schreibgeschützt dient zum Sperren dieses Steue...

So fahren Sie nginx herunter/starten es neu

Schließung Dienst Nginx stoppen systemctl stoppt ...

Eine kurze Diskussion darüber, ob zu viele MySQL-Datenabfragen OOM verursachen

Inhaltsverzeichnis Auswirkungen eines vollständig...

Details zur Verwendung des JSON-Typs in MySQL 5.7

JSON ist ein leichtes Datenaustauschformat, das e...

jQuery-Plugin zum Erzielen eines Code-Rain-Effekts

In diesem Artikel wird der spezifische Code des j...

Drei Methoden zum Ändern des Hostnamens von Centos7

Methode 1: Hostnamectl-Änderung Schritt 1 Überprü...

Schritte zum Verpacken und Freigeben des Vue-Projekts

Inhaltsverzeichnis 1. Übergang von der Entwicklun...

Detaillierte Erklärung zum MySQL-Index

Inhaltsverzeichnis 1. Index-Grundlagen 1.1 Einlei...

Einführung in die Stammverzeichniserweiterung unter Linux

1. Überprüfen Sie den Linux-Festplattenstatus df ...

HTTP-Statuscodes

Dieser Statuscode gibt Auskunft über den Status d...

Beispielcode einer Vue-Anwendung basierend auf der Axios-Anforderungskapselung

Inhaltsverzeichnis Was ist Axios? Axios-Anforderu...

So schreiben Sie eleganten JS-Code

Inhaltsverzeichnis Variable Verwenden Sie aussage...