Ergebnisse erzielenCode Cloud-Adresse Wissensreserve für rollende LadungenBeziehen Sie sich auf die Idee des Ladens durch Listen-Scrollen in Ant-Design-Vue und verwenden Sie Vue-Infinite-Scroll plus Vue-Virtual-Scroller als Lösung. KomponentenverpackungDa das vom gesamten System verwendete Framework Ant-Design-Vue ist, ist der Variablenbenennungsstil der Komponentenkapselung so konsistent wie möglich mit A-Table. 1. Benennung der KomponentenXScrollTable.vue 2. Zur Verfügung gestellte RequisitenPflichtfelder: dataSource – Datenquelle Spalten – Die in der Tabelle angezeigten Spalteninformationen. Die Slot-Nutzung ist nicht genau dieselbe wie bei einer Tabelle, die weiter unten erwähnt wird. itemSize – die Höhe jeder Datenzeile Optionale Felder: rowKey – Kennung des Primärschlüssels der Daten, Standard ist „key“ Höhe - Die Höhe des Tabellenanzeigebereichs, der Standardwert ist 500 pageSize - Die Datenmenge, die bei jedem Scrollen der Tabelle geladen wird. Der Standardwert ist 30. infiniteScrollDistance – Die Distanzbedingung zum Auslösen des Ladens der Tabelle, der Standardwert ist 10 rowSelection – Konfiguration für Mehrfachauswahl in Tabellen, die verarbeiteten Attribute sind selectedRowKeys, onChange, width. Der Standardwert ist Null und Mehrfachauswahlen werden nicht angezeigt. 3. AnwendungsbeispieleInitialisieren Sie zunächst 10.000 Datensätze und stellen Sie diese in einer Tabelle dar. Lassen Sie Daten = neues Array (10000).fill(1); Daten = Daten.Map((Element1, Index) => { lass Element = {}; Artikel-ID = Index; Artikel.Alter = "Name"; item.address = "Adresse"; Artikel zurückgeben; }); Standarddaten exportieren; Hinweis: fill(1) wird hier hinzugefügt, weil die vom Array-Konstruktor generierten Daten alle leer sind, kein Array-Index vorhanden ist und die Map-Schleife nicht ausgeführt werden kann. Laden der Tabelle <x-scroll-tabelle Stil="Rand oben: 10px" Zeilenschlüssel="id" :Artikelgröße="22" :rowSelection="{selectedRowKeys: selectedRowKeys, beiÄnderung: beiSelectChange,width:50}" :columns="Spalten" :dataSource="Daten"> <template slot="Aktion" slot-scope="{Datensatz,Text}"> <a @click="handleDetail(Datensatz)">Details</a> </Vorlage> </x-scroll-table> Zusammenfassung der Komponentenverpackung 1. Verwenden Sie nach Möglichkeit berechnete EigenschaftenObwohl die Tabelle einfach gekapselt ist, müssen noch viele Attribute definiert werden. Die Verwendung berechneter Attribute anstelle der Definition von Variablen in Daten kann den Arbeitsaufwand bei der Variablenwartung verringern. Die gesamte Komponente definiert nur eine Seitenvariable und die anderen verwenden berechnete Eigenschaften. Daten() { zurückkehren { // Aktuelle Anzeigeseitennummer Seite: 1, }; }, Zum Beispiel: Definieren Sie eine berechnete Eigenschaft über das Seitenattribut, um die aktuell geladene Datenmenge anzugeben // Die maximale Anzahl der anzuzeigenden Indizes kann größer sein als die Gesamtzahl der Datenelemente. Verwenden Sie Slice, um dieses Problem zu lösen. lastIndex() { gib diese Seitengröße zurück * diese Seite; }, Durch diese berechnete Eigenschaft werden gleichzeitig andere berechnete Eigenschaften abgeleitet // Zeigt an, ob die Tabellendaten geladen wurden busy() { gibt diesen.letztenIndex >= diese.Datenquelle.Länge zurück; }, // Die aktuell in die RecycleScroller-Scrolling-Komponente geladenen Daten tableData() { gibt diese.dataSource.slice(0, diesen.letztenIndex) zurück; }, Aus einer Seiteneigenschaft werden eine Reihe berechneter Eigenschaften abgeleitet. Ich muss nur die Seiteneigenschaft pflegen, die anderen werden automatisch berechnet. 2. Schlitze für den Tisch bereitstellenZunächst werden über den von der Tabelle übergebenen Parameter columns die Spalten berechnet, die gerendert werden sollen. Dabei werden auch die berechneten Eigenschaften verwendet. // Konvertiere das Spalten-Array in ein Spaltenobjekt, wobei du den columnFieldKey-Wert als Schlüssel und das Array-Element als Wert verwendest columnMap() { gib dies zurück.Spalten.Reduce((returnValue, cur) => { returnValue[cur[Spaltenfeldschlüssel]] = cur; Rückgabewert zurückgeben; }, {}); }, // Den Spaltenschlüsselwert im Array abrufen – columnFieldKey Spaltenschlüssel() { gib diese Spalten zurück .map(item => item[spaltenFeldschlüssel]); }, Durchlaufen der Vorlage <div v-for="(Schlüssel) von Spaltenschlüsseln" Klasse = "Ellipsenzelle" :Schlüssel="Schlüssel" :Stil="ArtikelStil(SpaltenMap[Schlüssel])" > <slot v-if="izSlotRender(SpaltenMap[Schlüssel])" :name="columnMap[Schlüssel].scopedSlots.customRender" :Datensatz="Zeile" :text="Zeile[Schlüssel]"> </slot> <span v-else :title="Zeile[Schlüssel]">{{ renderItem(Zeile, Index, Schlüssel) }}</span> </div> // Ob Slot-Rendering verwendet werden soll izSlotRender(item) { gibt item.scopedSlots und item.scopedSlots.customRender zurück; }, Wenn beim Definieren von Spalten scopedSlots und customRender übergeben werden, wird das Slot-Rendering verwendet. Allerdings gibt es hier einen Unterschied zur Tabellensteckplatzdarstellung in Ant-Design-Vue. Ich habe den Slot über das Slot-Tag definiert. Wenn die übergeordnete Komponente die Slot-Parameter erhält, kann ich nur die Objektdekonstruktionsmethode slot-scope="{record,text}" verwenden. Die Ant-Design-Vue-Tabelle kann Slot-Scope="Record,Text" direkt verwenden, um Parameter abzurufen. Eine weitere Implementierung des Scrollens beim Laden von DatenWenn viele Tabellendaten vorhanden sind, dauert das Laden der Seite eine Weile, bevor die Daten angezeigt werden. Das ist keine gute Erfahrung, daher müssen Sie scrollen, um die Daten zu laden. <el-table :data="materialliste" style="width: 100%" class="familyDataDetail" height="250"> <el-table-column prop="eventId" label="Ereignis-ID"> <Vorlage Umfang="Umfang"> <label>{{eventMap[scope.row.eventId] == null ? '--': eventMap[scope.row.eventId].sn}}</label> </Vorlage> </el-Tabellenspalte> <el-table-column prop="title" label="Entsprechendes Ereignis"> <Vorlage Umfang="Umfang"> <label>{{eventMap[scope.row.eventId] == null ? '--': eventMap[scope.row.eventId].title}}</label> </Vorlage> </el-Tabellenspalte> <el-table-column prop="Alter" label="Verantwortliche Person"> <Vorlage Umfang="Umfang"> <label>{{eventMap == null || eventMap[scope.row.eventId] == null || eventMap[scope.row.eventId].personalInformation == null ? '--': eventMap[scope.row.eventId].personalInformation.name}}</label> </Vorlage> </el-Tabellenspalte> <el-table-column prop="Geburtstag" label="Materialname"> <Vorlage Umfang="Umfang"> <label>{{materirlName}}</label> </Vorlage> </el-Tabellenspalte> <el-table-column prop="idcardNo" label="status"> <Vorlage Umfang="Umfang"> <label>{{formatType(scope.row.type)}}</label> </Vorlage> </el-Tabellenspalte> <el-table-column prop="Beziehung" label="Menge"> <Vorlage Umfang="Umfang"> <label>{{formatUseNum(scope.row.useNum)}}</label> </Vorlage> </el-Tabellenspalte> <el-table-column prop="ethnisch" label="Nutzungszeit"> <Vorlage Umfang="Umfang"> <label>{{Änderungszeit(scope.row.createOn)}}</label> </Vorlage> </el-Tabellenspalte> </el-Tabelle> Unten ist der js-Teil Methoden: { init (Parameter) { let id = param.param && param.param.id wenn(id){ dies.start = 0 MaterialRecordService.query({param: {baseId: this.baseId, materialId: id},start: this.start,limit: 30}).then(rsp => {//Erste Daten anfordern, 30 Datensätze this.start += 30 diese.materialliste = rsp.daten MissionEventService.microList({ids: rsp.data.map(n => n.eventId)}).then(rsp3 => { diese.eventMap = {} rsp3.data.forEach(n => (diese.eventMap[n.id] = n)) }) }) } }, beimScrollen() { let inner = document.querySelector('.el-table__body-wrapper'); if(inner.scrollHeight - inner.scrollTop <= inner.clientHeight){//Wenn true, beweist dies, dass das Ende erreicht ist und die Schnittstelle angefordert werden kann. if(this.flag){//Einen Schalter für das Scroll-Ereignis festlegen (Flag deklarieren: true in Daten). Der Standardwert ist true. this.flag = falsch MaterialRecordService.query({param: {baseId: this.baseId, materialId: this.entity.id},start: this.start,limit:30}).then(rsp => {//30 Elemente gleichzeitig laden this.materielList = this.materielList.concat(rsp.data) dies.start += 30 dieses.flag = wahr MissionEventService.microList({ids: rsp.data.map(n => n.eventId)}).then(rsp3 => { rsp3.data.forEach(n => (diese.eventMap[n.id] = n)) }) }) } } } }, montiert () { this.init({...this.param})<br> //Auf das Scroll-Ereignis des Tabellen-DOM-Objekts hören document.querySelector('.el-table__body-wrapper').addEventListener('scroll', this.onScroll); } Hier möchte ich erklären, welches DOM-Objekt überwacht wird Ich muss auch die drei Eigenschaften scrollHeight, scrollTop und clientHeight erklären Dies ist ein Screenshot eines fremden Bildes mit einigen Ergänzungen scrollHeight: Die Höhe des vollständigen Textes der Webseite. scrollTop: Die Höhe des Webseiten-Scrolls, clientHeight: Die Höhe des sichtbaren Bereichs der Webseite Oben finden Sie den detaillierten Inhalt der Vue-Implementierung von Scroll-Ladetabellen. Weitere Informationen zu Vues Scroll-Ladetabellen finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Ausführliches Tutorial zur Installation von MySQL 5.6-ZIP-Paketen
>>: Nginx-Überwachungsprobleme unter Linux
Nachdem wir eine Webdienstanwendung (wie etwa Tom...
Inhaltsverzeichnis Vorwort 1. Laden Sie MySQL 8.0...
<frameset></frameset> ist jedem bekann...
Vor einiger Zeit habe ich Testern eine Produktver...
Vue speichert Speicher mit Booleschen Werten Ich ...
Hauptsächlich verwendete Wissenspunkte: •CSS3 3D-...
Laufumgebung, Idea2020-Version, Tomcat10, beim Au...
Der Code demonstriert die horizontale Zusammenfüh...
Kapitel 1: Einführung in Keepalived Der Zweck des...
Vorwort Dieser Artikel stellt hauptsächlich den r...
Wenn Sie keine Javascript-Steuerung verwenden möch...
Inhaltsverzeichnis 1.kvm-Bereitstellung 1.1 KVM-I...
Beim Importieren von Daten mit falscher MySQL-Zei...
Inhaltsverzeichnis Drei Schritte zum Betrieb der ...
Inhaltsverzeichnis In JavaScript können wir norma...