So kapseln Sie Abfragekomponenten basierend auf Element-UI Schritt für Schritt

So kapseln Sie Abfragekomponenten basierend auf Element-UI Schritt für Schritt

Funktion

Im Anschluss an den vorherigen Artikel, der eine nützlichere Tabellenkomponente basierend auf dem Element-UI-Framework kapselt, beginnen wir mit dem Schreiben der Abfragekomponente. Was benötigt eine Abfragekomponente? Unten habe ich einen groben Prototyp gezeichnet, der im Wesentlichen die Funktionen beschreibt, die die Abfragekomponente implementieren muss.

Bildbeschreibung hier einfügen

Grundlegende Abfragefunktion [Bedingungen eingeben, Dropdown-Daten auswählen und auf Abfrage klicken]

Fügen Sie ein Dropdown-Feld für Abfragen hinzu [Wenn viele Abfragen vorhanden sind, kann keine Zeile eingegeben werden, und es werden mehrere Dropdown-Felder für Abfragen benötigt. Fügen Sie alle Abfragebedingungen außer den Standardabfragebedingungen in das Dropdown-Feld ein. Fügen Sie einige spezifische Standardabfragebedingungen ein, die durch die übergebenen Parameter gesteuert werden können]

Bedingte Anzeige hinzufügen [Wenn mehrere Abfragefelder vorhanden sind und Sie das Abfragefeld nicht öffnen, wissen Sie nicht, auf welchen Bedingungen die Daten basieren.]

Bereich für Funktionsschaltflächen hinzufügen [platziert normalerweise Funktionsschaltflächen für Stapelvorgänge wie Hinzufügen, Löschen und Ändern]

Grundlegende Abfragefunktionen

Für die Abfragefunktion müssen wir das Eingabefeld, das Dropdown-Feld, das Datumsfeld und andere Komponenten von element-ui verwenden, um sie zu implementieren. Wenn wir unsere Komponente verwenden, hoffen wir, ein Array verwenden zu können, um die Abfragebedingung zu beschreiben, und dann wird die Komponente die Bedingung entsprechend dem Array identifizieren und rendern. Zuerst müssen wir definieren, wie dieses Array aussieht.

// Methoden
initSearch() {
  const searchArr = this.searchArr
  wenn (Sucharr && Sucharr.Länge) {
    let searchForm = {}
    suchArr.fürJeden((val) => {
      Suchformular[Wert.Schlüssel] = ''
    })
    this.searchForm = Suchformular
  }
}
// montiert
montiert () {
    dies.initSearch()
},

Derzeit sind diese drei Felder am grundlegendsten und die Bedeutung der Felder wurde in den Codekommentaren klar dargelegt. Dieses Objekt kann noch weitere Felder enthalten. Beispielsweise werden die Dropdown-Daten normalerweise über die Hintergrundschnittstelle an das Frontend übergeben. Wir können hier eine URL, einen Parameter und eine Methode hinzufügen, um den Namen, die Parameter und die Anforderungsmethode der Schnittstelle zu definieren. Natürlich werden wir später bei der Implementierung darüber sprechen. Beginnen wir also mit der Entwicklung.

Initialisierung der Abfragebedingungen

Nachdem wir die SearchArr-Daten von außen übergeben haben, müssen wir sie beim Mounten durchlaufen und die Antwortdaten für die im Inhalt definierte Abfragebedingung „SearchForm“ festlegen.

// Methoden
initSearch() {
  const searchArr = this.searchArr
  wenn (Sucharr && Sucharr.Länge) {
    let searchForm = {}
    suchArr.fürJeden((val) => {
      Suchformular[Wert.Schlüssel] = ''
    })
    this.searchForm = Suchformular
  }
}
// montiert
montiert () {
    dies.initSearch()
},

Rendern der Seite

Da die von uns entworfene Abfrageseite in zwei Teile unterteilt ist, die die außen angezeigten Abfragebedingungen und weitere darin angezeigte Abfragebedingungen umfassen, werden wir feststellen, dass wir den doppelten Code zweimal schreiben müssen, wenn wir die Struktur in der Vorlage definieren. Wenn wir später neue Funktionen erweitern, wird dies eine weitere unbequeme körperliche Arbeit sein. Deshalb schreiben wir hier jsx in die Renderfunktion, wodurch die Struktur flexibler wird und der Code besser wiederverwendet werden kann. Nachdem wir nun die Idee erklärt haben, beginnen wir mit dem Schreiben des Codes.

// Props übergibt ein SearchArr-Array, um die Abfragebedingungen zu beschreiben/**
 * Beschreibung der Abfragebedingung */
Sucharr: {
  Typ: Array,
  Standard: () => []
},
// data definiert zwei Variablen, searchForm: das an das Backend übergebene Abfragefeld, selectOption: Dropdown-Daten searchForm: {},
Auswahloption: {}
// gemountete Initialisierungsdaten initSearch () {
  const searchArr = this.searchArr
  wenn (Sucharr && Sucharr.Länge) {
    let searchForm = {}
    suchArr.fürJeden((val) => {
      searchForm[val.__key] = '' // Benutzerdefiniertes Feld herausnehmen, in searchForm einfügen und einen leeren String zuweisen this.setOption(val) // Wenn es sich um Dropdown-Daten handelt, Dropdown-Liste selectOption zuweisen })
    this.searchForm = Suchformular
  }
},
// Methoden setzen Dropdown-Daten asynchron setOption (val) {
  wenn (~['select', 'mulSelect'].indexOf(val.__type)) {
    // Im ersten Fall, wenn die Dropdown-Daten lokal fest codiert sind, if (val.data && Array.isArray(val.data)) {
      dies.$set(diese.selectOption, val.__key, val.data)
    } sonst wenn (val.fetchUrl) {
      // Im zweiten Fall, wenn die Pulldown-Daten von der Hintergrundschnittstelle übergeben werden const result = await request({
        URL: val.fetchUrl,
        Methode: val.method || 'post'
      })
      if (Ergebnis && Ergebnis.Daten && Ergebnis.Daten.Erfolg) {
        dies.$set(diese.selectOption, val.__key, result.data.list || [])
      }
    }
  }
},

OK, nachdem wir die Initialisierungsarbeiten abgeschlossen haben, können wir mit dem Rendern beginnen. Wie bereits erwähnt, ist es flexibler, jsx in die Renderfunktion zu schreiben. Beginnen wir also mit dem Schreiben dieses Teils.

// Renderfunktion <div class="searchTable">
    <el-form
      inline={true}
      Requisiten = {{Modell: this.searchForm}}
      ref="Suchformular"
      Klasse="Suchformular">
      { 
        suchArr.map((o) => {
          Komponenten[o.__Typ] zurückgeben? Komponenten[o.__Typ](h, o, dies): ''
        })
      }
      <el-form-item>
        <el-button size="small" type="primary" icon="el-icon-search" on-click={ queryTable }>Abfrage</el-button>
        <el-form-item>
          <el-Link 
            Stil="Rand links: 10px;"
            Typ="primär" 
            unterstreichen={ false } 
            on-click={ () => { this.moreShow = !this.moreShow } }>Weitere Abfragen</el-link>
        </el-form-item>
      </el-form-item>
      <div Klasse = "more-search animiert" 
           Klasse = { this.moreShow ? 'fadeInDown' : 'fadeOutUp' } 
           v-show={ diese.mehrShow }>
           // ...weitere Abfragen</div>
    </el-form>
</div>

Bei der Operation in jsx ist eine Sache zu beachten. Im neuesten vue-cli wird die Verwendung von v-model und anderen Anweisungen in jsx bereits unterstützt, aber die Verwendung von el-input in element-ui meldet einen Fehler. Die unten verwendete v-show-Anweisung kann verwendet werden. Aber tatsächlich ist v-model nur ein syntaktischer Zucker. Hier verwenden wir das Eingabeereignis, um die neuesten Eingabedaten abzurufen, und weisen sie dann searchForm zu. Dieser Code wird extrahiert, da er sowohl für die extern angezeigten Abfragebedingungen als auch für die reduzierten Abfragebedingungen verwendet wird. Nachdem er extrahiert wurde, muss keine wiederholte Logik geschrieben werden. Im Folgenden sind die extrahierten Komponenten aufgeführt

  /**
   * Warum wurde das Eingabefeld entfernt? Hier müssen wir nur eine Tabellenabfrage durchführen. 
   * Tatsächlich, wenn Sie die Komponente zur Formularübermittlung wie den Popup-Fensterrahmen kapseln möchten. Sie können die Logik hier auch wiederverwenden* @param { Function } h h von Vue bereitgestellte Funktion* @param { Object } vom Benutzer geschriebenes Elementbeschreibungsobjekt* @param { Object } vm Vue-Instanz*/
  exportiere const input = Funktion (h, Artikel, vm) {
    const { Suchform } = vm
    zurückkehren (
      <el-form-item label={item.label}>
        <el-Eingabe
          Größe="klein"
          bei Eingabe = {(v) => { Suchformular[item.__key] = v }}
          Requisiten={{
            Wert: Suchformular[item.__key],
            Platzhalter: „Inhaltsinformationen eingeben“,
            ...Artikel
          }}
        >
        </el-Eingabe>
      </el-form-item>
    )
  }

  /**
   * 
   * @param { Function } h h von Vue bereitgestellte Funktion* @param { Object } vom Benutzer geschriebenes Elementbeschreibungsobjekt* @param { Object } vm Vue-Instanz*/
  exportiere const select = Funktion (h, Element, vm) {
    Konstante { 
      Suchformular = {}, 
      Auswahloption = {}, 
    } = vm
    /**
     * Auf Dropdown-Änderungsereignisse warten* @param { String | Number | Boolean } value Den Wert der Dropdown-Daten auswählen* @param { Object } value 
     */
    const selectChange = Funktion (Wert, Element) { 
      Suchformular[item.__key] = Wert
      vm.$emit('bei Änderung', Wert)
    }
    zurückkehren (
      <el-form-item label={item.label}>
        <el-Auswahl
          Requisiten={{
            Wert: Suchformular[item.__key],
            Platzhalter: "===Bitte wählen===",
            filterbar: true,
            löschbar: wahr,
            ...Artikel
          }}
          bei Änderung={ (Wert) => { Änderung auswählen(Wert, Element) } }
          Größe="klein">
            {
              wähleOption[item.__key] && wähleOption[item.__key].map((o) => {
                zurückkehren (
                  <el-Option 
                    Schlüssel={ o.Wert } 
                    Bezeichnung={ o.text } 
                    Wert={ o.Wert } >
                  </el-Option>
                )
              })
            }
        </el-Auswahl>
      </el-form-item>
    )
  }
  
    /**
   * 
   * Für ein Dropdown-Feld mit Mehrfachauswahl können Sie basierend auf der Einzelauswahlmethode zwei Eigenschaften hinzufügen. Durch das Schreiben dieser Methode können Benutzer ein paar Wörter weniger auswählen.
   * @param { Function } h h von Vue bereitgestellte Funktion* @param { Object } vom Benutzer geschriebenes Elementbeschreibungsobjekt* @param { Object } vm Vue-Instanz*/
  exportiere const mulSelect = Funktion (h, Artikel, vm) {
    item['mehrere'] = wahr
    Element ['Tags ausblenden'] = wahr
    Rückgabewert: select(h, item, vm)
  }

Das Obige ist eigentlich eine Methode, um mehrere Elementkomponenten in unabhängige Komponenten zu extrahieren. Wenn wir sie in externen Komponenten verwenden, können wir die entsprechende Komponentendarstellung direkt entsprechend dem vom Benutzer übergebenen Typ anpassen. Und wenn Sie später neue Abfragekomponenten hinzufügen möchten, müssen Sie diese nur hier erweitern, ohne andere Stellen zu verändern. Einfacher zu pflegen. Darüber hinaus verfügen wir innerhalb der Komponente über einige Standardverhalten, z. B. die Standard-Dropdown-Suchfunktion und die Standard-Löschenschaltfläche. Wenn das System dies nicht benötigt, können Sie auch die entsprechende Attributüberschreibung in searchArr schreiben.

    Komponenten[o.__Typ] zurückgeben? Komponenten[o.__Typ](h, o, dies): ''

Das grundlegende Rendering ist abgeschlossen und dann verwenden wir die Komponente außerhalb

Sucharr: [
    {
      __Typ: "Eingabe",
      Bezeichnung: 'Name',
      __Schlüssel: "Name"
    },
    {
      __Typ: "Auswählen",
      Bezeichnung: "Geschlecht",
      __key: 'Geschlecht',
      fetchUrl: "/getSelect",
      Methode: 'post'
      // Daten: [
      // { Text: 'Nein', Wert: '1' },
      // { text: 'Weiblich', value: '0' },
      // ]
    },
]

Schreiben Sie die entsprechenden Mock-Daten

Mock.mock(/\/getSelect/, 'post', () => {
  zurückkehren {
    Status: 200,
    Erfolg: wahr,
    Nachricht: "Erfolgreich abschließen",
    Liste: [
      {
        Text: 'Mann',
        Wert: '1'
      },
      {
        Text: 'Frau',
        Wert: '2'
      }
    ],
    Gesamt: Daten.Liste.Länge
  }
})

Bildbeschreibung hier einfügen

Ok, das Obige stellt die Bedingungen einfach durch eine Array-Beschreibung dar. Als Nächstes müssen wir weitere Abfragebedingungen für das Abfragefeld festlegen.

Weitere Abfrage- und Anzeigeoptimierung

Die außen angezeigten Abfragebedingungen werden entsprechend der vom Benutzer angegebenen Nummer angezeigt. Es können auch mehrere Abfragen entsprechend der vom Benutzer angegebenen Parameter in einer Zeile angezeigt werden.

=============== Requisiten ===============
/**
 * Wie viele externe Abfragebedingungen werden angezeigt*/
Anzahl der Frontseiten: {
  Typ: Nummer,
  Standard: 2
},
/**
 * Wie viele weitere Abfragebedingungen werden angezeigt*/
zurückAnzahl: {
  Typ: Nummer,
  Standard: 3
}
================ End-Requisiten ===============

=============== berechnet ===============
// Die auf der Seite angezeigten Abfragebedingungen frontSearchArr: function () {
  gib this.searchArr.slice(0, this.frontCount) zurück
},
// In weiteren Abfragen angezeigte Bedingungen backSearchArr: function () {
  gib dies.searchArr.slice zurück(diese.frontCount, diese.searchArr.length)
},
// Breite zurückgeben getSpan: function () {
  const yu = this.backSearchArr.length % this.backCount // Rest const duan = 24 / this.backCount // Breite jeder Bedingung if (yu === 0) {
    Rückkehr 24
  } anders {
    Rückkehr 24 - Duan
  }
}
================ Ende berechnet ===============

============== rendern ==============
  <div
    Stil = {`Breite: ${this.backCount * 265 + 30}px`}
    Klasse = { this.moreShow ? `${className} fadeInDown` : `${className} fadeOutUp` } 
    v-show={ diese.mehrShow }>
    <el-Zeile>
    {
      zurückSearchArr.map((o) => {
        zurückkehren (
          <el-col span={24 / this.backCount}>
            { Komponenten[o.__Typ] ? Komponenten[o.__Typ](h, o, dies) : '' }
          </el-col>
        )
      })
    }
      <el-col class="searchBtn" span={ getSpan } >
        <el-button size="small" type="primary" icon="el-icon-search" on-click={ queryTable }>Abfrage</el-button>
        <el-button size="small" type="default" icon="el-icon-upload2" on-click={ () => { this.moreShow = !this.moreShow } }>Verkleinern</el-button>
      </el-col>
    </el-row>
  </div>
=============== Rendern beenden ==============

Legen Sie in den berechneten Eigenschaften die extern angezeigten Daten und die intern angezeigten Daten fest. Schneiden Sie die Daten in zwei Teile. Die Suchkomponente hat eine feste Länge von 265. Berechnen Sie dann die Breite des Abfragefelds basierend auf den Bedingungen und berechnen Sie dann die Spannweite jeder Datenzeile basierend auf der Berechnungseigenschaft getSpan. Die Abfrage- und Verkleinerungsschaltflächen werden basierend auf der Anzahl der Abfragebedingungen berechnet, um zu bestimmen, wo sie platziert werden sollen.

Bildbeschreibung hier einfügen
Bildbeschreibung hier einfügen

Nach Prüfung entspricht die Wirkung grundsätzlich den Anforderungen.

Pulldown-Komponentenverknüpfungsabfrage

Wenn wir beispielsweise unsere Abfragekomponente zum Schreiben einer dreistufigen Verknüpfung verwenden müssen, wie sollten wir sie implementieren?

Nachdem Sie eine Provinz ausgewählt haben, müssen Sie die entsprechenden Dropdown-Daten für Städte basierend auf der ausgewählten Provinz laden

Wenn Sie eine Provinz löschen, müssen Sie die entsprechenden Dropdown-Menüs für Provinz und Stadt leeren.

Die Verknüpfung konzentriert sich hauptsächlich auf diese beiden Funktionen. Eine besteht darin, die entsprechenden Daten zu laden, und die andere darin, die entsprechenden Daten zu löschen. OK, jetzt, da wir wissen, was zu tun ist, können wir damit beginnen.

{
  __Typ: "Auswählen",
  __key: 'Provinz',
  __fetchUrl: '/getProvince',
  __Methode: "get",
  __nextKey: 'Stadt',
  __nextFetch: '/getCity',
  __nextParam: ['Provinz'],
  __nextMethod: "abrufen",
  __emptyArr: ['Stadt', 'Bezirk'],
  Bezeichnung: 'Provinz',
  Beschriftungsbreite: '40px',
},
{
  __Typ: "Auswählen",
  __key: 'Stadt',
  __Methode: "get",
  __nextKey: 'Bezirk',
  __nextFetch: '/getDistrict',
  __nextParam: ['Provinz', 'Stadt'],
  __nextMethod: "abrufen",
  __emptyArr: ['Bezirk'],
  Bezeichnung: 'Stadt',
  Beschriftungsbreite: '40px',
},
{
  __Typ: "Auswählen",
  __key: 'Bezirk',
  Bezeichnung: 'Bezirk',
  Beschriftungsbreite: '40px',
}

Um die Provinzdaten zu erhalten, müssen Sie nur __fetchUrl: '/getProvince' und __method: 'get' schreiben, um die Anforderungsschnittstelle zu definieren, und Sie können die Dropdown-Daten abrufen. Wenn Sie dann eine Provinz auswählen und ein Dropdown-Menü aufrufen, müssen Sie im Änderungsereignis Daten basierend auf der ausgewählten Provinz anfordern. Zu diesem Zeitpunkt müssen wir definieren, was bei einer Änderung der Daten zu tun ist. Sehen wir uns den folgenden Code an:

__nextKey: 'city', // Welchen Dropdown-Daten wird ein Wert zugewiesen?__nextFetch: '/getCity', // Anforderungsschnittstelle für die Zuweisung__nextParam: ['province'], // Anforderungsparameter__nextMethod: 'get', // Anforderungsmethode__emptyArr: ['city', 'district'] // Welche Dropdown-Kategorien müssen gelöscht werden, wenn die Dropdown-Daten geändert werden?/**
 * Auf Dropdown-Änderungsereignisse warten* @param { String | Number | Boolean } value Den Wert der Dropdown-Daten auswählen* @param { Object } value 
 */
const selectChange = asynchrone Funktion (Wert, Element) { 
  Suchformular[item.__key] = Wert
  // Dropdown-Liste und Dropdown-Daten leeren, wenn (Element && Element.__emptyArr) {
    für (sei i = 0; i < item.__emptyArr.length; i++) {
      let Schlüssel = item.__emptyArr[i]
      wenn (AuswahlOption[Schlüssel]) {
        wähleOption[Schlüssel] = []
      }
      vm.$set(Suchformular, Schlüssel, '')
    }
  }
  wenn (Artikel && Artikel.__nextFetch && Artikel.__nextParam) {
    let param = {}
    für (let j = 0; j < item.__nextParam.length; j++) {
      let Wert = Suchformular[item.__nextParam[j]]
      wenn (Wert) {
        param[item.__nextParam[j]] = Wert
      }
    }
    const res = warte auf Anfrage({
      URL: item.__nextFetch,
      Methode: item.__nextMethod || 'post'
    }, Parameter)
    wenn (res) {
      let { Daten } = res
      wenn (Daten && Daten.Erfolg) {
        vm.$set(Auswahloption, Element.__nächsterSchlüssel, Daten.Liste)
      }
    }
  }
  vm.$emit('bei Änderung', Wert)
}

Ok, damit ist die dreistufige Verknüpfungsfunktion im Wesentlichen abgeschlossen. Nachfolgend sehen Sie das Wirkungsdiagramm

Bildbeschreibung hier einfügen

Komponentenerweiterung

Die Komponentenerweiterung ist sehr einfach. Wenn uns noch einige erforderliche Komponenten fehlen, können wir direkt in components.js eine neue hinzufügen

/**
 * Datumsauswahl * @param {*} h 
 * @param {*} Element 
 * @param {*} vm 
 */
exportiere const Datum = Funktion (h, Artikel, vm) {
  const { Suchform } = vm
  zurückkehren (
    <el-form-item label={item.label} labelBreite={item.labelBreite}>
        <el-Datumsauswahl
        bei Eingabe = {(v) => { Suchformular[item.__key] = v }}
        Requisiten={{
          Typ: "Datum",
          Größe: 'klein',
          Wert: Suchformular[item.__key],
          Platzhalter: "Wählen Sie ein Datum",
          ...Artikel
        }}
      >
      </el-Datumsauswahl>
    </el-form-item>
  )
}

// Bei Verwendung von searchArr { hinzufügen
  __Typ: "Datum",
  __key: 'Geburtstag',
  Beschriftung: „Geburtstag“
}

Es sind keine weiteren Änderungen erforderlich, um das Hinzufügen eines neuen Abfragebedingungstyps abzuschließen. Die Auswirkungen sind wie folgt:

Bildbeschreibung hier einfügen

Anzeige der Suchbedingungen

Die Suchbedingungsfunktion ist relativ einfach, d. h. nachdem der Benutzer auf die Suche geklickt hat, werden die Eingabebedingungen angezeigt. Wir trennen dies als unabhängiges Widget

        <query-info ref="queryInfo" on-remove={this.removeTag} Auswahloption={ this.selectOption }></query-info>

Diese Komponente übergibt das Dropdown-Array an die Komponente. Als wir es entworfen haben, haben wir gesagt, dass es die Bedingungen auch durch Klicken auf das Kreuz löschen kann, also müssen wir ein benutzerdefiniertes Ereignis zum Entfernen auslösen. Nachdem wir die Bedingungen gelöscht haben, löschen wir die Bedingungen und rufen die Abfragemethode auf. Übergeben Sie bei der Abfrage die Suchbedingungen an die Komponente, damit die Komponente angezeigt werden kann. Es ist hier zu beachten, dass wir die Suchkriterien nicht direkt über Props an die Komponente übergeben können. Wenn wir dies tun, werden die Daten, da sie reagieren, unten angezeigt, wenn Sie die Kriterien eingeben, was nicht das ist, was wir wollen. Was wir wollen, ist, dass die Abfragekriterien angezeigt werden, wenn Sie auf die Abfrageschaltfläche klicken. Daher rufen wir hier direkt die interne Methode in der Abfrageschaltflächenmethode auf, um die Kriterien zu übergeben, und verwenden dann intern JSON.parse(JSON.stringify(val)), um eine tiefe Kopie zu erstellen und die Daten von den externen Daten zu isolieren.

Tag entfernen (Name) {
  this.searchForm[name] = ''
  diese.queryTable()
}

// Abfrage queryTable () {
  dies.$refs.queryInfo && dies.$refs.queryInfo.queryTable(dieses.searchForm)
  this.moreShow = false
  dies.$emit('Suche', dies.Suchformular)
}

Die Implementierung der Komponente ist wie folgt:

<Vorlage>
  <div Klasse="QueryInfo">
    <el-tag
      v-for="Tag in Tags"
      :key="tag"
      verschließbar
      Stil="Rand rechts: 10px;"
      @close="close(tag)"
      >
      {{displayName(tag)}}
    </el-tag>
  </div>
</Vorlage>

<Skript>
importiere { getTitle } von '@/utils/utils'
Standard exportieren {
  Requisiten: {
    // Dropdown-DatenauswahlOption: {
      Typ: Objekt,
      Standard: () => []
    }
  },
  Daten () {
    zurückkehren {
      // Abfragebedingungen searchForm: {}
    }
  },
  berechnet: {
    /// Berechnen Sie die Eingabebedingungen Array-Tags: function () {
      let-Tags = []
      let keys = Objekt.keys(dieses.Suchformular)
      Schlüssel.fürJeden((Schlüssel) => {
        wenn (diese.Suchform[Schlüssel]) {
          tags.push(Schlüssel)
        }
      })
      Rückgabe-Tags
    }
  },
  Methoden: {
    // Zum Schließen klicken close (Tag) {
      this.searchForm[tag] = ''
      dies.$emit('entfernen', tag)
    },
    // Extern aufgerufene Methode queryTable (searchForm) {
      dieses.Suchformular = JSON.parse(JSON.stringify(Suchformular))
    },
    // Anzeigename, wenn es sich um Dropdown-Daten handelt, mit dem Namen in den Dropdown-Daten übereinstimmen und ihn anzeigen displayName(Schlüssel) {
      let value = this.searchForm[Schlüssel]
      wenn (diese.Auswahloption[Schlüssel]) {
        returniere getTitle(Wert, this.selectionOption[Schlüssel])
      } anders {
        Rückgabewert
      }
    }
  }
}
</Skript>

<Stilbereich>
.queryInfo {
  Rand unten: 10px;
}
</Stil>

Die erzielten Effekte sind wie folgt:

Bildbeschreibung hier einfügen

Bereich für Funktionstasten hinzufügen

Dies wird derzeit der SearchTable-Komponente mithilfe eines Slots hinzugefügt.

<div Klasse="rechts">
  {this.$slots.rightButton}
</div>

// Verwenden Sie <search-table :searchArr="searchArr" @search="search">
  <Vorlage v-slot:rechterButton>
    <el-Schaltfläche 
      Größe="klein" 
      Typ="Erfolg" 
      @click="() => { MessageBox({ message: 'In Entwicklung', Typ: 'Warnung' })}">
      Hinzufügen </el-button>
  </Vorlage> 
</Suchtabelle>
Code kopieren

Wirkung:

Bildbeschreibung hier einfügen

Abschließende Gedanken

Bisher wurden einige Funktionen, die die Abfragekomponente erreichen möchte, nach und nach realisiert. Tatsächlich ist es nicht kompliziert. Das Wichtigste ist, es nicht zu tun, sondern vorher gründlich darüber nachzudenken. Später werden wir den dynamischen Header vervollständigen, sodass die relevanten Anforderungen für die Tabelle grundsätzlich erfüllt sind.

Sie können unserem Open-Source-Projekt auch einen Stern geben: http://github.crmeb.net/u/defu Vielen Dank!

Dies ist das Ende dieses Artikels, in dem Schritt für Schritt erklärt wird, wie Abfragekomponenten basierend auf Element-UI gekapselt werden. Weitere relevante Inhalte zur Element-UI-Kapselung von Abfragekomponenten finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Detaillierte Erklärung, wie Sie Ihre eigene Komponente in Vue Element-UI kapseln
  • Vue-Beispielcode basierend auf der Kapselung von Element-UI-Paging-Komponenten
  • Schritte zum Kapseln von Element-UI-Popupkomponenten

<<:  Vollständiges HTML des Upload-Formulars mit Bildvorschau

>>:  Einführung in /etc/my.cnf-Parameter in MySQL 5.7

Artikel empfehlen

Analyse des Prinzips und der Verwendung von MySQL-Benutzerdefinierten Funktionen

Dieser Artikel veranschaulicht anhand von Beispie...

Lösung für das Problem, dass Docker-Protokolle nicht abgerufen werden können

Als ich den Dienst täglich überprüfte und mir die...

jquery+springboot realisiert die Datei-Upload-Funktion

In diesem Artikelbeispiel wird der spezifische Co...

JavaScript zum Erreichen aller oder umgekehrter Auswahlfunktionen

In diesem Artikel wird der spezifische JavaScript...

So installieren Sie eine MySQL-Datenbank auf einem Debian 9-System

Vorwort Beim Anblick des Titels sollte sich jeder...

Alibaba Cloud beantragt ein kostenloses SSL-Zertifikat (https) von Cloud Shield

Da das Projekt den https-Dienst nutzen muss, habe...

Tutorial zur Installation von MySQL8 unter Linux CentOS7

1. Installation der RPM-Version Überprüfen Sie, o...

Website-Homepage-Design im Illustrationsstil Neuer Trend im Website-Design

Sie können sehen, dass ihre visuellen Effekte sehr...