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

Beispielcode zum Hervorheben von Suchbegriffen im WeChat-Miniprogramm

1. Einleitung Wenn Sie im Projekt auf eine Anford...

Optimale Webseitenbreite und ihre kompatible Implementierungsmethode

1. Beim Entwerfen einer Webseite ist das Bestimmen...

So löschen Sie schwebenden Beispielcode in CSS

Überblick Das Rahmendiagramm dieses Artikels ist ...

JS realisiert den Effekt des Bildwasserfallflusses

In diesem Artikel wird der spezifische JS-Code zu...

Tutorial zur Installation einer MySQL-ZIP-Datei

In diesem Artikel wird die spezifische Methode zu...

Wie stellt MySQL eine Verbindung zum entsprechenden Clientprozess her?

Frage Wie können wir bei einer bestimmten MySQL-V...

Sechsstufiger Beispielcode für eine JDBC-Verbindung (Verbindung zu MySQL)

Sechs Schritte von JDBC: 1. Registrieren Sie den ...

Docker nginx implementiert einen Host zum Bereitstellen mehrerer Sites

Die virtuelle Maschine, die ich von einer bestimm...

Erklären, wie die SQL-Effizienz analysiert wird

Der Befehl „Explain“ ist der erste empfohlene Bef...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 5.7.20 (Win10)

In diesem Artikel wird die Installations- und Kon...

Eine vollständige Anleitung zum Löschen von Floats in CSS (Zusammenfassung)

1. Übergeordnetes Div definiert Pseudoklassen: af...