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. Wenn im Internet Explorer die relative Position...
Das Wechseln von Dateien ist eine gängige Operati...
Die EXPLAIN-Anweisung wird im MySQL-Abfrageanweis...
1. Navigation: Ungeordnete Liste vs. andere Besch...
Auf dem heimischen Markt besteht noch immer ein g...
So zeigen Sie Linux-Dateien an Befehl zum Anzeige...
In früheren Blogbeiträgen habe ich mich auf einige...
Code kopieren Der Code lautet wie folgt: <!DOC...
Inhaltsverzeichnis Installieren Sie Mockjs in Ihr...
Die SSH-Public-Key-Authentifizierung ist eine der...
prune Um diesen Befehl verwenden zu können, müsse...
Zuerst müssen wir einige Abhängigkeiten installie...
Mit der Verbreitung von 3G nutzen immer mehr Mens...
1. Einleitung Wenn wir uns bei MySQL anmelden, wi...
Dieser Artikel teilt den spezifischen Code des er...