Uniapp實現(xiàn)下拉刷新的三種方式
在小程序、h5等地方中,常常會用到下拉刷新這個功能,今天來講解實現(xiàn)這個功能的三種方式:全局下拉刷新,組件局部下拉刷新,嵌套組件下拉刷新。
全局下拉刷新
這個方式簡單,性能佳,最推薦,以下為步驟:
配置pages.json(在需要該功能的頁面設置對應屬性)
{ "pages": [ { "path": "pages/index/index", "style": { "enablePullDownRefresh": true, // 下拉 loading 的樣式,可選值為 'dark' 或 'light' "backgroundTextStyle": "dark" } } ] }
在頁面中監(jiān)聽下拉刷新時間(使用onPullDownRefresh生命周期函數(shù))
<template> <view> <!-- 頁面內容 --> </view> </template> <script> export default { onPullDownRefresh() { // 模擬異步請求數(shù)據(jù) setTimeout(() => { // 這里可以編寫刷新數(shù)據(jù)的邏輯,比如重新請求接口獲取最新數(shù)據(jù) console.log('下拉刷新完成'); // 停止下拉刷新動畫 uni.stopPullDownRefresh(); }, 2000); } }; </script>
scroll-view 組件局部下拉刷新
- 在
scroll-view
組件中有自定義下拉刷新的屬性以及相關方法可以直接使用,但是性能不如全局下拉刷新,且scroll-view
組件停止下拉刷新的方法可能有兼容問題,會使用不了,此時可以用refressher-triggered屬性控制下拉刷新的狀態(tài)。 - 注意:scroll-view是區(qū)域滾動,不會觸發(fā)頁面滾動,無法觸發(fā)pages.json配置的下拉刷新、頁面觸底onReachBottomDistance、titleNView的transparent透明漸變。
使用示例
<template> <scroll-view scroll-y refresher-enabled @refresherrefresh="onRefresh" @refresherrestore="onRestore" @refresherabort="onAbort" > <!-- 滾動內容 --> <view v-for="item in list" :key="item.id">{{ item.name }}</view> </scroll-view> </template> <script> export default { data() { return { list: [ { id: 1, name: 'Item 1' }, { id: 2, name: 'Item 2' }, { id: 3, name: 'Item 3' } ] }; }, methods: { onRefresh() { // 模擬異步請求數(shù)據(jù) setTimeout(() => { // 這里可以編寫刷新數(shù)據(jù)的邏輯,比如重新請求接口獲取最新數(shù)據(jù) console.log('局部下拉刷新完成'); // 停止下拉刷新動畫 this.$refs.scrollViewRef.finishPullToRefresh(); }, 2000); }, onRestore() { console.log('下拉刷新被復位'); }, onAbort() { console.log('下拉刷新被中止'); } } }; </script>
嵌套組件中的下拉刷新
場景:需要在子組件觸發(fā)下拉刷新功能,但是在pages.json中只能配置父頁面的下拉刷新屬性
父組件配置全局下拉刷新
在page.json中為父頁面配置enablePullDownRefresh為true,并在父組件的onPullDownRefresh生命周期函數(shù)中調用子組件的刷新方法。
<template> <view> <!-- 其他內容 --> <child-component ref="childRef"></child-component> </view> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent }, onPullDownRefresh() { console.log('父頁面觸發(fā)下拉刷新'); // 調用子組件的刷新方法 this.$refs.childRef.refreshData().then(() => { // 停止下拉刷新動畫 uni.stopPullDownRefresh(); }).catch((error) => { console.error('刷新數(shù)據(jù)出錯:', error); uni.stopPullDownRefresh(); }); } }; </script>
子組件定義刷新方法
<template> <!-- 子組件內容 --> </template> <script> export default { methods: { async refreshData() { console.log('子組件開始刷新數(shù)據(jù)'); // 這里編寫刷新數(shù)據(jù)的邏輯,比如重新請求接口獲取最新數(shù)據(jù) try { // 調用獲取消息的方法 await this.getData(); console.log('子組件數(shù)據(jù)刷新完成'); } catch (error) { console.error('子組件刷新數(shù)據(jù)出錯:', error); throw error; } }, // 其他方法... } }; </script>
到此這篇關于Uniapp實現(xiàn)下拉刷新的三種方式的文章就介紹到這了,更多相關Uniapp下拉刷新內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
cropper js基于vue的圖片裁剪上傳功能的實現(xiàn)代碼
這篇文章主要介紹了cropper js基于vue的圖片裁剪上傳功能的相關資料,需要的朋友可以參考下2018-03-03JS在IE和FireFox之間常用函數(shù)的區(qū)別小結
IE和FireFox之間常用函數(shù)的區(qū)別小結,需要的朋友可以參考下。2010-03-03