Vue如何實(shí)現(xiàn)分批加載數(shù)據(jù)
分批加載數(shù)據(jù)
最近在寫vue的項(xiàng)目,因?yàn)楹笈_(tái)返回的數(shù)據(jù)量太大,在調(diào)用了高德地圖渲染"polygon"覆蓋物的時(shí)候處理不過來,直接蹦掉了,然后后臺(tái)小哥哥和我講可以分批處理~沒想到真的是快了很多很多,眼過千變不如手過一遍~,在此記錄一下!?。?/p>
首先我們需要定義四個(gè)全局的變量
pagindex頁碼pagesize一頁要請求多少條數(shù)據(jù)pagetotal一共要請求多少次(總數(shù) / pagesize),總是是后臺(tái)返回的~intertimer存的定時(shí)器的函數(shù),方便清除定時(shí)器
export default {
? name: "map_app",
? inject:['reload'],
? data() {
? ? return {
? ? ? pagindex: 1, //頁碼
? ? ? pagesize: 300, //頁/條數(shù)
? ? ? pagetotal: 0, //一共要請求的次數(shù)
? ? ? intertimer: null, //定時(shí)器
? ? ?}
? ?}
}然后再methods中寫定時(shí)器 讓定時(shí)器每隔三秒再去執(zhí)行一個(gè)方法;
//定時(shí)器
getPageInter(map) {
? this.loading = this.$loading({ //加載層
? ? ? ? lock: true,
? ? ? ? text: "拼命加載中",
? ? ? ? spinner: "el-icon-loading",
? ? ? ? background: "rgba(0, 0, 0, 0.7)"
? ? });
?
? ? this.intertimer = setInterval(() => {
? ? ? ?this.intervalData(map); //每三秒調(diào)用一次方法
? ? ? }, 3000);
?},然后再這個(gè)方法里面我們?nèi)プ雠袛?,如果?dāng)前請求的頁數(shù)超過一共要請求的次數(shù)就清楚定時(shí)器!
//定時(shí)器2
intervalData(map) {
? ?if (this.pagindex > this.pagetotal) {
? ? ? ? clearInterval(this.intertimer); //關(guān)閉定時(shí)器
? ? ? ? this.loading.close(); //關(guān)閉彈窗
? ? ? ? this.pagindex = 1;
? ? } else {
? ? ? ? this.renderMesh(map); //數(shù)據(jù)渲染
? ? ? ? this.pagindex += 1;
? ? ? }
},總數(shù)是后臺(tái)小哥哥返回的,然后我們每次去請求接口的時(shí)候要給后臺(tái)傳當(dāng)前是第幾頁,還有要請求多少條數(shù)據(jù)
renderMesh(map) {?
? ? ?this.$axios
? ? ? ?.get(this.httpApi + "/api/Main/GetBlockMap", {
? ? ? ? ? params: {
? ? ? ? ? ? BlockCode: this.pageid,
? ? ? ? ? ? page: this.pagindex, //當(dāng)前頁碼
? ? ? ? ? ? rownum: this.pagesize //請求數(shù)量
? ? ? ? ? }
? ? ? })
? ? ? .then(res => {
? ? ? ?console.log(res);
? ? ? })
? ? ? .catch(err => {
? ? ? ?console.log("請求失敗233");
? ? ? ?});
}因?yàn)槲业目倲?shù)是調(diào)用的另外一個(gè)接口,然后也寫一下代碼
? ? this.$axios
? ? .get(this.httpApi + "/api/Main/GetBlockMapCount", {
? ? ? ? ? params: {
? ? ? ? ? ? BlockCode: this.pageid
? ? ? ? ? }
? ? ?})
? ? ?.then(res => {
? ? ? ? ? let jsonData = eval("(" + res.data + ")");
? ? ? ? ? //總數(shù)除每次請求多少條數(shù)據(jù)得出一共要請求多少次
? ? ? ? ? this.pagetotal = Math.ceil(jsonData.totals / this.pagesize);?
? ? ? })
? ? ? .catch(err => {
? ? ? ? ? console.log("請求失敗");
? ? ? });滾動(dòng)加載數(shù)據(jù)
核心方法:
handleScroll: function () {
var scrollTop =
document.documentElement.scrollTop || document.body.scrollTop;
var windowHeitht =
document.documentElement.clientHeight || document.body.clientHeight;
var scrollHeight =
document.documentElement.scrollHeight || document.body.scrollHeight;
if (scrollTop + windowHeitht >= scrollHeight - 2000) {
if (this.scroll) {
this.GetSpecialData();
}
}
},
GetSpecialData() {
this.scroll = false;
this.page.pageIndex++;
this.load(this.page, this.query);
},監(jiān)聽:
?mounted() {
? ? window.addEventListener("scroll", this.handleScroll);
? },
? destroyed() {
? ? window.removeEventListener("scroll", this.handleScroll, false);
? },以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue如何利用flex布局實(shí)現(xiàn)TV端城市列表功能
用vue開發(fā)了三四個(gè)組件了,都是H5的,現(xiàn)在來看看PC是如何玩轉(zhuǎn)組件的,下面這篇文章主要給大家介紹了關(guān)于Vue如何利用flex布局實(shí)現(xiàn)TV端城市列表功能的相關(guān)資料,需要的朋友可以參考下2023-01-01
Vue路由模式中的hash和history模式詳細(xì)介紹
VUE分為兩種路由模式分別是hash(哈希)和history,他們的區(qū)別是hash模式不會(huì)包含在http請求中,并且不會(huì)重新加載頁面,而使用history模式的話,如果前端的url和后端發(fā)起請求的url不一致的話,會(huì)報(bào)404錯(cuò)誤,所以使用history模式的話我們需要和后端進(jìn)行配合2022-09-09
Vue3+Vite如何解決“找不到模塊“@/components/xxx.vue”或其相應(yīng)的類型聲明ts(2307)”
在Vue項(xiàng)目中使用Vite時(shí),可能因版本差異而需修改tsconfig.app.json而非tsconfig.json以解決編譯錯(cuò)誤,本文分享個(gè)人解決經(jīng)驗(yàn),供參考2024-10-10
vue router嵌套路由在history模式下刷新無法渲染頁面問題的解決方法
這篇文章主要介紹了vue router嵌套路由在history模式下刷新無法渲染頁面問題的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
Vuex數(shù)據(jù)持久化的兩種方式:手動(dòng)存儲(chǔ)和vuex-persistedstate插件詳解
這篇文章主要介紹了Vuex數(shù)據(jù)持久化的兩種方式:手動(dòng)存儲(chǔ)和vuex-persistedstate插件,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08
vite(vue3)配置內(nèi)網(wǎng)ip訪問的方法步驟
Vite是一個(gè)快速的構(gòu)建工具,Vue3是一個(gè)流行的JavaScript框架,下面這篇文章主要給大家介紹了關(guān)于vite(vue3)配置內(nèi)網(wǎng)ip訪問的方法步驟,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05
vue.js實(shí)現(xiàn)數(shù)據(jù)動(dòng)態(tài)響應(yīng) Vue.set的簡單應(yīng)用
這篇文章主要介紹了vue.js實(shí)現(xiàn)數(shù)據(jù)動(dòng)態(tài)響應(yīng),Vue.set的簡單應(yīng)用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
解決vue2+vue-router動(dòng)態(tài)路由添加及路由刷新后消失問題
這篇文章主要介紹了解決vue2+vue-router動(dòng)態(tài)路由添加及路由刷新后消失問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08

