Scrollen Sie in Vue nach unten, um weitere Daten zu laden. Detaillierte Erläuterung des Scroll-Falls

Scrollen Sie in Vue nach unten, um weitere Daten zu laden. Detaillierte Erläuterung des Scroll-Falls

Vue-unendliches Scrollen

Installieren

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)

Implementierungsbeispiel

Die 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

  • v-infinite-scroll="loadMore" bedeutet, dass die Rückruffunktion loadMore ist
  • infinite-scroll-disabled="busy" bedeutet, dass die Variable busy bestimmt, ob loadMore ausgeführt wird. Wenn false , wird loadMore ausgeführt, und wenn true , wird es nicht ausgeführt. Bitte beachten Sie, dass busy busy bedeutet und es nicht ausgeführt wird, wenn busy ist.
  • infinite-scroll-distance="10" Dabei bestimmt 10 , wie viele Pixel vom Seitenende weg die Seite gescrollt wird, bevor die Rückruffunktion ausgelöst wird. 10 ist der Pixelwert. Normalerweise machen wir am Ende der Seite ein „Wird geladen...“ mehrere Dutzend Pixel hoch. In diesem Fall können wir die Höhe dieses Divs auf den Wert infinite-scroll-distance setzen.

Andere Optionen:

  • infinite-scroll-immediate-check Der Standardwert ist true . Diese Anweisung bedeutet, dass der Wert von busy und ob bis zum Ende gescrollt wurde, unmittelbar nach dem Binden überprüft werden soll. Wenn die Höhe Ihres anfänglichen Inhalts nicht ausreicht, um den scrollbaren Container zu füllen, sollten Sie ihn auf true setzen. Dadurch wird sofort ein loadMore ausgeführt, das Ihnen beim Einfügen einiger anfänglicher Inhalte hilft.
  • infinite infinite-scroll-listen-for-event erneut geprüft.
  • infinite-scroll-throttle-delay prüft den Wert von busy für ein bestimmtes Zeitintervall. Der Standardwert ist 200. Dies liegt daran, dass das Grundprinzip von vue-infinite-scroll darin besteht, dass vue-infinite-scroll zyklisch den Wert von busy prüft und ob bis zum Ende gescrollt wurde. Die Callback-Funktion wird nur ausgeführt, wenn busy false ist und der Scroll bis zum Ende reicht.

Praktische Anwendung

Wie 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 this.busy = false auch als Ajax-Callback verwendet werden


Vue-Scroller

Installieren

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

  • Hinweis: Wenn „Done“ aufgerufen wird, bevor die Daten der Vorlage zugewiesen werden, wird die Dropdown-Funktion immer ausgelöst. Daher müssen wir sie nach der Zuweisung der Vorlage im Rückruf der erfolgreichen Anforderung aufrufen.
  • Die Dropdown-Funktion ist über Bindungsattribute an das Scroller-Tag gebunden, sodass wir die Anforderungsfunktion beim Erstellen nicht einmal aufrufen müssen. Beim Initialisieren der Seite wird die Dropdown-Funktion automatisch einmal aufgerufen, um die Daten der ersten Seite abzurufen.
//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{
                       
                    }
                })
            },

Beachten

Wenn die Tab-Leiste umgeschaltet werden soll, müssen Sie den Status des Scrollers zurücksetzen. Wenn der Parameter finishInfinite(false) false ist, wird die Pull-Up-Funktion erneut aufgerufen, um den aktuellen Status des Scrollers zurückzusetzen.

warenAlle(){
                dieser.status = "alle"
                diese.seite = 0
                diese.alle_seite = 1
                dies.$refs.myscroller.finishInfinite(false);
                diese.Bestellliste = []
            },

triggerPullToRefresh() löst eine Pulldown-Aktualisierung aus

finishPullToRefresh() Pull-to-Refresh abschließen

dies.$refs.my_scroller.finishInfinite(false)
finishInfinite(isNoMoreData :Boolean) Wenn der Parameter false ist, kann die Pull-Up-Datenerfassung erneut aufgerufen werden. Wenn der Parameter wahr ist, wird die Pull-Up-Datenrückruffunktion nicht mehr verwendet und im unteren Teil des Pull-Downs wird nicht mehr „Laden“ angezeigt, sondern „Keine weiteren Daten“.


Vue-unendliches Laden

Installieren

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.

  • Mit der Methode „Loaded“ wird die Animation nach jedem Datenladen gestoppt. Anschließend ist die Komponente für den nächsten Auslöser bereit.
  • Mit der Methode „complete“ wird das unendliche Laden abgeschlossen und die Komponente verarbeitet keine Bildlaufvorgänge mehr. Wenn die Methode beim Laden nie aufgerufen wird, ruft sie die vollständige Methode auf. Diese Komponente zeigt dem Benutzer die Ergebnisnachricht an. Wenn nicht, werden keine Benutzernachrichten mehr angezeigt. Andere Inhalte können über den Slot festgelegt werden.
  • Die Reset-Methode bringt die Komponente in ihren ursprünglichen Zustand zurück

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:
  • Vue implementiert ein Beispiel zum Herunterziehen und Scrollen zum Laden von Daten
  • Vue-Beispiel für die Verwendung des Mausrads zum Laden von Daten
  • Beispielcode für unendliches Laden von Daten beim Scrollen zum Ende der Seite unter Vue
  • Detaillierte Erklärung zweier Möglichkeiten zum Laden von Daten mit Vue.Js in Kombination mit Jquery Ajax
  • Javascript vue.js Tabellenpaging, Ajax asynchrones Laden von Daten
  • Vue.js-Tabellenpaging, Ajax, asynchrones Laden von Daten

<<:  MySQL 8.0.18 Installations-Tutorial unter Windows (Abbildung)

>>:  Docker-Bereitstellung von Implementierungsschritten für Flask-Anwendungen

Artikel empfehlen

Einige Fragen zu Hyperlinks

Ich freue mich sehr, an dieser Folge der Kartoffe...

Problem mit der Iframe-QRC-Zuweisung (serverseitig)

Ich bin heute auf dieses Problem gestoßen. Ich hab...

mysqldump-Parameter, die Sie möglicherweise nicht kennen

Im vorherigen Artikel wurde erwähnt, dass die in ...

14 praktische Erfahrungen zur Reduzierung von SCSS-Code um 50 %

Vorwort Sass ist eine Erweiterung der CSS3-Sprach...

Detaillierte Erklärung zur Verwendung des Linux-Befehls mpstat

1. mpstat-Befehl 1.1 Befehlsformat mpstat [ -A ] ...

Detaillierte Erklärung der CSS-Hintergrund- und Rahmen-Tag-Beispiele

1. CSS-Hintergrund-Tag 1. Stellen Sie die Hinterg...

Vite+Electron zum schnellen Erstellen von VUE3-Desktopanwendungen

Inhaltsverzeichnis 1. Einleitung 2. Erstellen Sie...

Tutorial zum Deaktivieren und Aktivieren von Triggern in MySQL [Empfohlen]

Bei der Verwendung von MySQL werden häufig Trigge...

Zwei Implementierungscodes der programmgesteuerten Navigation mit Vue-Router

Zwei Möglichkeiten zum Navigieren auf der Seite D...