Szenario Ich habe vor kurzem mit der Entwicklung eines Hintergrundverwaltungssystems auf Basis von ElementUI begonnen und dabei versehentlich ein Problem mit der Dropdown-Auswahl „el-select“ entdeckt. Wenn die Datenmenge in den „Optionen“, die die Dropdown-Optionen rendern, zu groß ist (die Anzahl der Dateneinträge in diesem Projekt hat 10.000 überschritten), bleibt der Dropdown-Selektor hängen, insbesondere bei der Fuzzy-Matching-Filterung. Beim Initialisieren des Selektors erfolgt beim Klicken keine Reaktion, und manchmal müssen Sie mehrere Male klicken, bevor das Popup-Fenster „Dialog“ angezeigt wird (dieser Dropdown-Filter ist im Popup-Fenster implementiert). Nachdem ich viele Blog-Notizen gelesen hatte, fand ich endlich eine Lösung für das Problem. Ich werde diesen Optimierungsplan jetzt als Notiz aufzeichnen, damit ich leicht darauf zurückgreifen kann, wenn ich in Zukunft auf ähnliche Probleme stoße. Hinweis: Basierend auf dem ausgewählten Dropdown-Filter wird durch benutzerdefinierte Ereignisse eine unscharfe Suchübereinstimmung erreicht. Es gibt zwei Möglichkeiten:
Code-ImplementierungBeispiel einer Vue-Komponente <Vorlage> <div Klasse="App"> <el-dialog title="Titel" :visible.sync="relatedOpen" :append-to-body="true" width="500px"> <el-row :gutter="16"> <el-col :span="20"> <el-Auswahl v-Modell="Wert" filterbar löschbar Stil="Breite:100%" Platzhalter="Bitte auswählen" :loading="SucheLaden" :filter-method="Filtermethode" v-el-select-loadmore="Weitere laden(Bereichsnummer)" @visible-change="sichtbareÄnderung" > <el-option v-for="Element in Optionen.slice(0, Bereichsnummer)" :Schlüssel="Element.Schlüssel" :label="Element.Wert" :Wert="Element.Schlüssel"></el-option> </el-Auswahl> </el-col> <el-col :span="4"> <el-button type="primary" @click="submit">OK</el-button> </el-col> </el-row> </el-dialog> </div> </Vorlage>
// Benutzerdefinierte Anweisungen: { "el-select-loadmore": (el, Bindung) => { // Holen Sie sich das durch das Element UI definierte Scroll-Element const SELECTWRAP_ROM = el.querySelector(".el-select-dropdown .el-select-dropdown__wrap"); wenn (SELECTWRAP_ROM) { // Scroll-Ereignis hinzufügen SELECTWRAP_ROM.addEventListener("scroll", function() { // Scrollen bestimmen const condition = this.scrollHeight - this.scrollTop <= this.clientHeight; Bedingung und Bindungswert(); }); } } } Die entsprechende Datenfunktion Standard exportieren { Daten() { zurückkehren { verbundenOpen: false, options: [] /* Wähle den Wert des Dropdown-Feldes */, Kursliste: [], Bereichsnummer: 10, searchLoad: false /* Ladezustand der Dropdown-Box*/, Wert: "", Timer: null }; }, erstellt() { dies.getOptions(); }, Methoden: { // Bei Bedarf laden loadMore(n) { return () => (diese.Bereichsnummer += 5); }, // Kursmaterial filtern filterMethod(query) { wenn (dieser.timer != null) clearTimeout(dieser.timer); !diese.searchLoad && (diese.searchLoad = true); dieser.timer = setTimeout(() => { diese.Optionen = !!Abfrage ? diese.Kursliste.Filter(el => el.Value.toLowerCase().Includes(Query.toLowerCase())) : diese.Kursliste; : LöscheTimeout(diesen.Timer); this.searchLoad = falsch; diese.Bereichsnummer = 10; dieser.timer = null; }, 500); }, // Auf das Anzeigen und Ausblenden des Auswahl-Dropdown-Felds achten visibleChange(flag) { // Listenflag beim Anzeigen initialisieren && this.filterMethod(""); // Standardwert initialisieren this.rangeNumber = 10; }, // Optionen abrufen async getOptions() { warte auf searchCourseware().then(res => { lass Liste = res.data || []; //Standardmäßig angezeigte Daten this.options = list; //Originaldaten this.courseList = Liste; }); } } } Notiz:
Zusammenfassen:Ich habe in eine neue Arbeitsumgebung gewechselt und beginne nun mit der Arbeit am Backend-Verwaltungssystem. Dabei werde ich in unterschiedlichem Ausmaß auf verschiedene Probleme stoßen. Wie immer werde ich die während der Entwicklung aufgetretenen Probleme in meinen Notizen festhalten. Ein gutes Gedächtnis ist nicht so gut wie ein schlechter Stift. Ich hoffe, jetzt die Samen zu pflanzen und im nächsten Herbst die Früchte zu ernten. JY Dies ist das Ende dieses Artikels über die Implementierung des optimierten Ladens mehrerer ausgewählter Daten in Element. Weitere relevante Inhalte zum Laden mehrerer ausgewählter Daten in Element 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:
|
<<: So konvertieren Sie eine Spalte mit durch Kommas getrennten Werten in Spalten in MySQL
>>: Implementierung der durch Kommas getrennten MySQL-Split-Funktion
1. Javascript kehrt zur vorherigen Seite zurück hi...
Umgebungsvorbereitung 1. Umweltkonstruktion React...
Inhaltsverzeichnis 1. Stoppen Sie zuerst den MySQ...
Zusammenfassen Globale Umgebung ➡️ Fenster Normal...
Die Implementierung eines benutzerdefinierten Kar...
1. Der Unterschied zwischen den Befehlen > und...
1 Einleitung Die Thread-Technologie wurde bereits...
Inhaltsverzeichnis Manipulationssicheres Javascri...
Kurzbeschreibung Passend für Leser: Mobile Entwic...
Die Datenbankmigration ist ein Problem, auf das w...
Dieser Artikel darf gerne geteilt und zusammengef...
Durch Zufall entdeckte ich, dass eine SQL-Anweisu...
Inhaltsverzeichnis Tutorial-Reihe 1. MySQL-Archit...
Inhaltsverzeichnis Vorwort Erstellen Sie ein Vite...
Dieser Artikel dient lediglich der Erinnerung an ...