Vue-unendliches ScrollenInstallieren npm installiere vue-infinite-scroll --save Obwohl der Beamte auch mehrere Lademethoden empfiehlt, ist die „vue-freundlichste“ Methode definitiv, sie in main.js hinzuzufügen importiere infiniteScroll aus „vue-infinite-scroll“ Vue.use(unendlichesScroll) ImplementierungsbeispielDie offiziellen Codebeispiele gehen davon aus, dass Sie Code in der Stammkomponente schreiben. Tatsächlich müssen wir Code in der untergeordneten Komponente schreiben, sodass der Code ebenfalls leicht geändert werden muss. Im Folgenden sind nur nützliche Codeausschnitte aufgeführt: <div v-infinite-scroll="Mehr laden" infinite-scroll-disabled="beschäftigt" infinite-scroll-distance="10"> <div v-for="Element in Daten" :key="item.index">{{item.name}}</div> </div> Daten () { zurückkehren { Anzahl: 0, Daten: [], beschäftigt: falsch } } Methoden: { Mehr laden: Funktion() { dies.beschäftigt = wahr setzeTimeout(() => { für (var i = 0, j = 10; i < j; i++) { dies.data.push({name: dies.count++ }) } konsole.log(diese.daten) this.busy = falsch }, 1000) } } Wirkung Standardmäßig werden 10 Datenzeilen geladen. Wenn Sie bis zum Ende der Seite scrollen, werden nach 1 Sekunde 10 weitere Elemente geladen. Wenn Sie dann weiter scrollen, werden weitere 10 Elemente geladen. Wie unten dargestellt: Option Erklärung
Andere Optionen:
Praktische AnwendungWie Sie sehen, wird im obigen Beispiel die Datenvariable ständig geändert und die Daten in der Datenvariable nehmen ständig zu, was richtig zu sein scheint. In der Praxis müssen unsere neuen Daten jedoch von Ajax abgerufen werden, und nicht durch Verwendung einer For-Schleife zum Einfügen nutzloser natürlicher Zahlen wie im Beispiel. Darüber hinaus ist setTimeout nicht erforderlich. Wir möchten Ajax sofort ausführen, wenn die Seite nach unten gescrollt wird. Tatsächlich dient setTimeout im obigen Code nur dazu, einen verzögerten Ladeeffekt zu simulieren, und bedeutet nicht, dass Ajax um 1 Sekunde verzögert werden muss. Was tun im tatsächlichen Kampf? Sie müssen lediglich diesen simulierten Ajax-Code in den echten Ajax-Code ändern, um Daten abzurufen: setzeTimeout(() => { für (var i = 0, j = 10; i < j; i++) { dies.data.push({name: dies.count++ }) } konsole.log(diese.daten) this.busy = falsch }, 1000) Zusätzlich muss Vue-ScrollerInstallieren npm installiere vue-scroller -d Verwendung in main.js VueScroller aus „vue-scroller“ importieren Vue.use(VueScroller) verwenden Hinweis: Am besten stellen Sie einen hohen <scroller style="top: 100px;" :height='400' :on-refresh="aktualisieren" :on-infinite="unendlich" ref="myscroller"> <div Klasse = "order-box" v-for = "(item,index) in orderList" :key = "index"> </div> </scroller> Daten Daten(){ zurückkehren { Status: „alle“, Bestellliste:[], Seite:0, alle_seiten:1, } }, Zum Aktualisieren nach unten ziehen aktualisieren (fertig) { setzeTimeout(()=>{ Erledigt(); },1500) }, Zum Laden nach oben ziehen
//Nach unten ziehen, um unendlich auszulösen (erledigt) { wenn(diese.Seite>=diese.alle_Seiten){ setzeTimeout(()=>{ dies.$refs.myscroller.finishInfinite(true); },1500) }anders{ setzeTimeout(()=>{ diese.seite++; dies.getorderList(erledigt) },500); } }, getorderList(erledigt){ dies.$http({ Methode: 'post', URL: „/seckill/server/orderList“, Daten:{ jwt:dieses.jwt, Status:dieser.status, Seite:diese.Seite, Seitengröße: 5 } }).dann(res=>{ wenn(res.data.code == 0){ diese.orderList.push.apply(diese.orderList,res.data.data.list) dies.$refs.myscroller.finishInfinite(true) diese.Seite = res.data.data.page diese.alle_seite = res.daten.daten.alle_seite Erledigt(); }anders{ } }) },
warenAlle(){ dieser.status = "alle" diese.seite = 0 diese.alle_seite = 1 dies.$refs.myscroller.finishInfinite(false); diese.Bestellliste = [] },
Vue-unendliches LadenInstallieren npm installiere vue-infinite-loading --save Verwendung innerhalb der Komponente // Die Komponentenklasse verwendet import InfiniteLoading from 'vue-infinite-loading'; Standard exportieren { Komponenten: { Unendliches Laden } } //Verwende die Basisversion <infinite-loading Spinner = "Spirale" @infinite="unendlicherHandler" :Entfernung="200" Klasse = "unendliches Laden-Wrap" > <!-- <div slot="spinner">Wird geladen...</div> --> <div slot="no-more">Keine weiteren Daten</div> <div slot="no-results">Keine Ergebnisdaten</div> <!-- <div slot="Fehler" slot-scope="{ trigger }"> Fehlerdaten. Klicken Sie <a href="javascript:;" rel="external nofollow" rel="external nofollow" @click="trigger">hier</a>, um es erneut zu versuchen </div> --> </unendlich-laden> Grundlegende Verwendung <Vorlage> <div> <p v-for="(Element, Index) in Liste" :Schlüssel="Index"> <span v-text="Artikel"></span> </p> <!--Die Komponente zum unendlichen Laden sollte am Ende der Liste, innerhalb des Bildlauffelds, platziert werden! --> <unendlich-laden Spinner = "Spirale" @infinite="unendlicherHandler" :Bezeichner="unendlicheId" :Entfernung="200" Klasse = "unendliches Laden-Wrap" > <div slot="spinner">Wird geladen...</div> <div slot="no-more">Keine weiteren Daten</div> <div slot="no-results">Keine Ergebnisdaten</div> <div slot="Fehler" slot-scope="{ trigger }"> Fehlerdaten. Klicken Sie <a href="javascript:;" rel="external nofollow" rel="external nofollow" @click="trigger">hier</a>, um es erneut zu versuchen </div> </unendlich-laden> </div> </Vorlage> <Skript> importiere InfiniteLoading von „vue-infinite-loading“; Standard exportieren { Daten() { zurückkehren { infiniteId: +new Date(), // Scroll-Status zurücksetzen, Seite ändern: 1, Liste: [] }; }, Methoden: { // Scroll-Status zurücksetzen rest(){ diese.liste = []; diese.Seite = 1; diese.unendlicheId += 1; }, async infiniteHandler($zustand) { // Anforderungsdaten simulieren const res = await this.$axios.workList({ page: this.page, pagesize: 20 }); wenn (res.data.list.length) { diese.seite += 1; diese.Liste = diese.Liste.concat(res.data.list); $zustand.geladen(); } anders { $zustand.abgeschlossen(); } // Hier wird eine Ladeverzögerung von 1 Sekunde simuliert //setTimeout(() => { // lass temp = []; // für (lass i = diese.Listenlänge + 1; i <= diese.Listenlänge + 20; i++) { //temp.push(i); // } // diese.Liste = diese.Liste.concat(temp); // $state.loaded(); //}, 1000); //}, }, Komponenten: { Unendliches Laden } } </Skript> Paging-Nutzung <Vorlage> <div> <ul> <li class="hacker-news-item" v-for="(item, key) in list"></li> </ul> <unendlich-laden @infinite="infiniteHandler"> Keine weiteren Daten </unendlich-laden> </div> </Vorlage> <Skript> importiere InfiniteLoading von „vue-infinite-loading“; importiere Axios von „Axios“; Standard exportieren { Daten() { zurückkehren { Liste: [], }; }, Methoden: { infiniteHandler($zustand) { let api = "http://xxx.com/xxx"; // API fordert Datenadresse für Sie an axios .get(api, { Parameter: { // Seitenzahlenparameter (10 pro Seite) Seite: this.list.length / 10 + 1, }, }) .then((Antwort) => { wenn (Antwort.Daten.Länge) { // response.data ist die Array-Liste, die von Ihrer Anforderungsschnittstelle zurückgegeben wird: this.list = this.list.concat(response.data); $zustand.geladen(); wenn (diese.Liste.Länge / 10 === 10) { // Hier werden 10 Seiten mit Daten geladen und die Einstellung ist, dass keine weiteren geladen werden $state.complete(); } } anders { $zustand.abgeschlossen(); } }); }, }, Komponenten: { Unendliches Laden }, }; </Skript> Beschreibung: $state: Diese Komponente übergibt einen speziellen Ereignisparameter $state an den Ereignishandler, um den Ladestatus zu ändern. Der Parameter $state umfasst drei Methoden, nämlich die geladene Methode, die vollständige Methode und die Reset-Methode.
Bedingte Verwendung <Vorlage> <div Klasse="Hacker-News-Liste"> <div Klasse="Hacker-News-Header"> <!--Zum Ändern nach unten ziehen--> <select v-model="tag" @change="changeFilter()"> <option value="story">Geschichte</option> <option value="history">Verlauf</option> </Auswählen> <!--Oder klicken zum Ändern--> <button @click="changeFilter()">Suchen</button> </div> <ul> <li class="hacker-news-item" v-for="(item, key) in list"></li> </ul> <!--Vergessen Sie nicht, dies festzulegen: ref="infiniteLoading"--> <unendlich-laden @infinite="infiniteHandler" ref="infiniteLoading"> Keine Daten mehr </unendlich-laden> </div> </Vorlage> <Skript> importiere InfiniteLoading von „vue-infinite-loading“; importiere Axios von „Axios“; Standard exportieren { Daten() { zurückkehren { Liste: [], Schlagwort: 'Geschichte', }; }, Methoden: { infiniteHandler($zustand) { const api="http://xxx.com/xxx"; //API fordert die Datenadresse für Sie an axios.get(api, { Parameter: { // Geänderte bedingte Parameter-Tags: this.tag, Seite: this.list.length / 10 + 1, }, }).dann(({ Daten }) => { if (Daten.Ergebnis.Länge) { diese.Liste = diese.Liste.concat(Daten.Ergebnis); $zustand.geladen(); wenn (diese.Liste.Länge / 20 === 10) { Zustand.abgeschlossen(); } } anders { $zustand.abgeschlossen(); } }); }, //Ändern Sie die bedingte Leiste mit dieser Methode changeFilter() { diese.liste = []; dies.$nextTick(() => { dies.$refs.infiniteLoading.$emit('$InfiniteLoading:reset'); }); }, }, Komponenten: { Unendliches Laden } } </Skript> Stabilisierung importiere { debounce } von "lodash"; // Anti-Shake // Anti-Shake get: debounce(async function () { lass k = warte darauf.$axios.getList_API(); console.log(k, "Anti-Shake-Version"); }, 1000), Dies ist das Ende dieses Artikels über Vue, das nach unten scrollt, um weitere Daten zu laden – Scrollen – Fall. Weitere relevante Inhalte zum Laden von Vue-Daten finden Sie in den vorherigen Artikeln von 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:
|
<<: MySQL 8.0.18 Installations-Tutorial unter Windows (Abbildung)
>>: Docker-Bereitstellung von Implementierungsschritten für Flask-Anwendungen
1. Docker auf dem Server installieren yum install...
Ich freue mich sehr, an dieser Folge der Kartoffe...
Ich bin heute auf dieses Problem gestoßen. Ich hab...
veranschaulichen: VMware IOInsight ist ein Tool, ...
Im vorherigen Artikel wurde erwähnt, dass die in ...
Vorwort Sass ist eine Erweiterung der CSS3-Sprach...
1. mpstat-Befehl 1.1 Befehlsformat mpstat [ -A ] ...
Die erste Methode: Fügen Sie dynamisch eine Klass...
Was ist ein Primärschlüssel? Ein Primärschlüssel ...
1. CSS-Hintergrund-Tag 1. Stellen Sie die Hinterg...
Ich habe einen Server, auf dem mehrere Docker-Con...
Inhaltsverzeichnis 1. Einleitung 2. Erstellen Sie...
Bei der Verwendung von MySQL werden häufig Trigge...
Zwei Möglichkeiten zum Navigieren auf der Seite D...
Sie können das Attribut in HTML5 verwenden <inp...