vue.js整合vux中的上拉加載下拉刷新實(shí)例教程
前言
Vux 是基于 Vue 和 Weui 開(kāi)發(fā)的手機(jī)端頁(yè)面 UI 組件庫(kù),開(kāi)發(fā)初衷是滿足公司的微信端表單需求,因?yàn)榈谌降恼{(diào)查問(wèn)卷表單系統(tǒng)在手機(jī)上實(shí)在比較丑(還是 PC 那一套樣式適配了大小而已)。于是用 vue 重構(gòu)了表單組件,后來(lái)一發(fā)不可收拾把其他常用組件也一并開(kāi)發(fā)了。
相比于 React 還是更喜歡用 Vue ,除了目前社區(qū)組件不多,周邊構(gòu)建工具還是比較完善的(作者也特別勤奮)。
下面話不多說(shuō)了,來(lái)一看看詳細(xì)的介紹吧。
先上圖

創(chuàng)建項(xiàng)目
使用vue-cli 創(chuàng)建一個(gè)vue項(xiàng)目
安裝vux,可以參考:vux快速入門
配置
打開(kāi)后會(huì)看到一段話
該組件已經(jīng)不再維護(hù),也不建議使用,大部分情況下也不需要用到該組件。 建議使用第三方相關(guān)組件,相關(guān) issue 將不會(huì)處理。
不知道作者為啥不維護(hù)了,明明需求挺多的
我沒(méi)有用demo里的 LoadMore 組件,用的是 Scroller里自帶的 use-pullup, use-pulldown 下面是我的配置
<!--
height: 我用到x-header了,文檔里說(shuō)header高是48px,所以這里設(shè)置成-48
-->
<scroller use-pullup :pullup-config="pullupDefaultConfig" @on-pullup-loading="loadMore"
use-pulldown :pulldown-config="pulldownDefaultConfig" @on-pulldown-loading="refresh"
lock-x ref="scrollerBottom" height="-48">
</scroller>
<script>
import {Scroller, XHeader} from 'vux'
const pulldownDefaultConfig = {
content: '下拉刷新',
height: 40,
autoRefresh: false,
downContent: '下拉刷新',
upContent: '釋放后刷新',
loadingContent: '正在刷新...',
clsPrefix: 'xs-plugin-pulldown-'
}
const pullupDefaultConfig = {
content: '上拉加載更多',
pullUpHeight: 60,
height: 40,
autoRefresh: false,
downContent: '釋放后加載',
upContent: '上拉加載更多',
loadingContent: '加載中...',
clsPrefix: 'xs-plugin-pullup-'
}
export default {
components: {
XHeader,
Scroller
},
mounted() {
this.$nextTick(() => {
this.$refs.scrollerBottom.reset({top: 0})
})
},
data() {
return {
list: [],
pullupDefaultConfig: pullupDefaultConfig,
pulldownDefaultConfig: pulldownDefaultConfig
}
},
methods: {
refresh() {
},
loadMore() {
}
}
}
</script>
請(qǐng)求接口遍歷數(shù)據(jù)
接口服務(wù)用的是mock.js生成的數(shù)據(jù),可以看一下這篇文章:使用mock.js隨機(jī)數(shù)據(jù)和使用express輸出json接口
安裝 axios
yarn add axios
//...
methods: {
fetchData(cb) {
axios.get('http://localhost:3000/').then(response => {
this.$nextTick(() => {
this.$refs.scrollerBottom.reset()
})
cb(response.data)
})
}
}
//...
完善refresh,loadMore方法
//...
methods: {
refresh() {
this.fetchData(data => {
this.list = data.list
this.$refs.scrollerBottom.enablePullup()
this.$refs.scrollerBottom.donePulldown()
})
},
loadMore() {
this.fetchData(data => {
if (this.list.length >= 10) {
this.$refs.scrollerBottom.disablePullup()
}
this.list = this.list.concat(data.list)
this.$refs.scrollerBottom.donePullup()
})
}
}
//...
在組件加載的時(shí)候調(diào)用一下 loadMore 方法
//...
mounted() {
this.$nextTick(() => {
this.$refs.scrollerBottom.reset({top: 0})
})
this.loadMore()
}
//...
最后把html部分補(bǔ)全
<scroller> <div style="padding: 10px 0"> <div class="box" v-for="(item, index) in list" :key="index"> <p class="list"></p> </div> </div> </scroller>
完整代碼
<template>
<div>
<x-header :left-options="{'showBack': false}">上拉加載,下拉刷新</x-header>
<scroller use-pullup :pullup-config="pullupDefaultConfig" @on-pullup-loading="loadMore"
use-pulldown :pulldown-config="pulldownDefaultConfig" @on-pulldown-loading="refresh"
lock-x ref="scrollerBottom" height="-48">
<div style="padding: 10px 0">
<div class="box" v-for="(item, index) in list" :key="index">
<p class="list"></p>
</div>
</div>
</scroller>
</div>
</template>
<script>
import {Scroller, XHeader} from 'vux'
import axios from 'axios'
const pulldownDefaultConfig = {
content: '下拉刷新',
height: 40,
autoRefresh: false,
downContent: '下拉刷新',
upContent: '釋放后刷新',
loadingContent: '正在刷新...',
clsPrefix: 'xs-plugin-pulldown-'
}
const pullupDefaultConfig = {
content: '上拉加載更多',
pullUpHeight: 60,
height: 40,
autoRefresh: false,
downContent: '釋放后加載',
upContent: '上拉加載更多',
loadingContent: '加載中...',
clsPrefix: 'xs-plugin-pullup-'
}
export default {
components: {
XHeader,
Scroller
},
mounted() {
this.$nextTick(() => {
this.$refs.scrollerBottom.reset({top: 0})
})
this.loadMore()
},
data() {
return {
list: [],
pullupDefaultConfig: pullupDefaultConfig,
pulldownDefaultConfig: pulldownDefaultConfig
}
},
methods: {
fetchData(cb) {
axios.get('http://localhost:3000/').then(response => {
this.$nextTick(() => {
this.$refs.scrollerBottom.reset()
})
cb(response.data)
})
},
refresh() {
this.fetchData(data => {
this.list = data.list
this.$refs.scrollerBottom.enablePullup()
this.$refs.scrollerBottom.donePulldown()
})
},
loadMore() {
this.fetchData(data => {
if (this.list.length >= 10) {
this.$refs.scrollerBottom.disablePullup()
}
this.list = this.list.concat(data.list)
this.$refs.scrollerBottom.donePullup()
})
}
}
}
</script>
<style lang="less">
.box {
padding: 5px 10px 5px 10px;
&:first-child {
padding: 0 10px 5px 10px;
}
&:last-child {
padding: 5px 10px 0 10px;
}
}
.list {
background-color: #fff;
border-radius: 4px;
border: 1px solid #f0f0f0;
padding: 30px;
}
.xs-plugin-pulldown-container {
line-height: 40px;
}
.xs-plugin-pullup-container {
line-height: 40px;
}
</style>
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- vue.js移動(dòng)端app之上拉加載以及下拉刷新實(shí)戰(zhàn)
- 解決Vue使用mint-ui loadmore實(shí)現(xiàn)上拉加載與下拉刷新出現(xiàn)一個(gè)頁(yè)面使用多個(gè)上拉加載后沖突問(wèn)題
- vue使用mint-ui實(shí)現(xiàn)下拉刷新和無(wú)限滾動(dòng)的示例代碼
- vueScroll實(shí)現(xiàn)移動(dòng)端下拉刷新、上拉加載
- vue插件mescroll.js實(shí)現(xiàn)移動(dòng)端上拉加載和下拉刷新
- vue2.0 移動(dòng)端實(shí)現(xiàn)下拉刷新和上拉加載更多的示例
- vue使用better-scroll實(shí)現(xiàn)下拉刷新、上拉加載
- vue移動(dòng)端實(shí)現(xiàn)下拉刷新
- vue移動(dòng)端下拉刷新和上拉加載的實(shí)現(xiàn)代碼
- vue實(shí)現(xiàn)原生下拉刷新
相關(guān)文章
vue請(qǐng)求本地自己編寫(xiě)的json文件的方法
這篇文章主要介紹了vue請(qǐng)求本地自己編寫(xiě)的json文件,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04
Message組件實(shí)現(xiàn)發(fā)財(cái)U(kuò)I?示例詳解
這篇文章主要為大家介紹了Message組件實(shí)現(xiàn)發(fā)財(cái)U(kuò)I的手寫(xiě)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
vue-cli項(xiàng)目根據(jù)線上環(huán)境分別打出測(cè)試包和生產(chǎn)包
這篇文章主要介紹了vue-cli項(xiàng)目根據(jù)線上環(huán)境打出測(cè)試包和生產(chǎn)包的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05
使用Vue-axios進(jìn)行數(shù)據(jù)交互的方法
這篇文章主要介紹了使用Vue-axios進(jìn)行數(shù)據(jù)交互詳情,文章圍繞Vue-axios進(jìn)行數(shù)據(jù)交互的相關(guān)資料展開(kāi)詳細(xì)內(nèi)容,需要的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)或工作有所幫助2022-03-03
vue3項(xiàng)目中代碼出現(xiàn)紅色波浪線的問(wèn)題及解決
這篇文章主要介紹了vue3項(xiàng)目中代碼出現(xiàn)紅色波浪線的問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09
ElementUI實(shí)現(xiàn)el-table行列合并的操作步驟
在前端開(kāi)發(fā)中,數(shù)據(jù)展示一直是一個(gè)重要的部分,而表格則是數(shù)據(jù)展示最常見(jiàn)的形式之一,ElementUI 是餓了么前端團(tuán)隊(duì)推出的一款基于 Vue 的 UI 組件庫(kù),其中的 el-table 組件是一個(gè)功能強(qiáng)大且靈活的表格組件,今天我們要詳細(xì)探討的是 el-table 的行列合并操作2024-08-08
解決vue3傳屬性時(shí)報(bào)錯(cuò)[Vue?warn]:Component?is?missing?template?or
這篇文章主要給大家介紹了關(guān)于解決vue3傳屬性時(shí)報(bào)錯(cuò)[Vue?warn]:Component?is?missing?template?or?render?function的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-01-01
vue2 el-table行懸停時(shí)彈出提示信息el-popover的實(shí)現(xiàn)
本文主要介紹了vue2 el-table行懸停時(shí)彈出提示信息el-popover的實(shí)現(xiàn),用到了cell-mouse-enter、cell-mouse-leave兩個(gè)事件,具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01

