封裝微信小程序的頁面狀態(tài)控制:加載中、斷網(wǎng)錯(cuò)誤重試级历、空頁面等

最近在做微信小程序,發(fā)現(xiàn)很多頁面都有一種特點(diǎn):在onLoad里異步發(fā)送HTTP請(qǐng)求加載數(shù)據(jù)叭披。默認(rèn)的界面是wxml中定義好的模板寥殖,如果斷網(wǎng)或者網(wǎng)速較慢就會(huì)一直卡在這里玩讳,界面看起來不太友好。

默認(rèn)模板

所以需要加入一個(gè)加載中的提示嚼贡,成功加載后再切換回來熏纯。使用wx.showLoading等API無法完全遮擋后面突兀的模板,所以要在wxml中寫一些界面的代碼才可以完成這項(xiàng)需求粤策。

如果在每個(gè)page的wxml中都寫一次這種代碼樟澜,工作量非常大,后期重構(gòu)也不方便叮盘,所以本文提供了一種使用template的方式秩贰,復(fù)用這段代碼。需要切換狀態(tài)的時(shí)候直接在js中一行代碼pageState.xxx()即可柔吼。

下面是演示圖片毒费,具體的內(nèi)容可以定制,比如做一個(gè)加載動(dòng)畫愈魏。

演示

使用方法

在需要的page的wxml文件開頭加入兩行代碼:

<!--pages/xxxxxx.wxml-->
<import src="/utils/pageState/index.wxml" />
<template is="pageState" data="{{...pageState}}" />
<!-- 這里是原來頁面的內(nèi)容 -->
<!-- <view class="container"> -->

在需要的page的js文件中使用:

import pageState from '這里寫js文件的路徑'

Page({
// ...
  getXXXXX(xxxxx) {
    const pageState = pageState(this)
    pageState.loading()    // 切換為loading狀態(tài)
    api.getXXXXX(xxxxx) // 異步請(qǐng)求
      .then((res) => {
        // 更新界面...
        pageState.finish()    // 切換為finish狀態(tài)
      })
      .catch(err => {
        pageState.error()    // 切換為error狀態(tài)
      })
  },
// ...

模板代碼

wxml

這里定義了模板觅玻,根據(jù)狀態(tài)判斷是否顯示以及顯示那種狀態(tài):

<!-- utils/pageState/index.wxml -->
<template name="pageState">
  <view class="page-state-container" wx:if="{{state != 'finish'}}">
    <view class="page-state-empty page-state-center" wx:if="{{state == 'empty'}}">
      <icon type="info" size="70" />
      <view class="message">{{message}}</view>
    </view>
    <view class="page-state-loading page-state-center" wx:if="{{state == 'loading'}}">
      <icon type="waiting" size="70" />
      <view class="message">{{message}}</view>
    </view>
    <view class="page-state-error page-state-center" wx:if="{{state == 'error'}}">
      <icon type="warn" size="70" />
      <view class="message">{{message}}</view>
      <button class="retrybtn" type="warn" catchtap="onRetry">重試</button>
    </view>
  </view>
</template>

這里使用了兩個(gè)變量:statemessage,表示當(dāng)前的狀態(tài)和提示信息培漏。

這里注意必須在使用此模板的page中定義onRetry溪厘,即異步加載數(shù)據(jù)的代碼,才可以使用重試按鈕牌柄。

wxss

接著定義樣式:

<!-- utils/pageState/index.wxss -->
.page-state-center {
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  align-content: center;
  height: 100%;
  width: 100%;
}

.page-state-container {
  animation: fadein 2s 1 ease-out;
  height: 100%;
  width: 100%;
}

.page-state-container~view {
  display: none;
}

page {
  height: 100%;
  overflow-y: auto;
}

這里我設(shè)置了一個(gè)漸入的動(dòng)畫畸悬,刪掉也沒關(guān)系。注意最后一個(gè).page-state-container~view這里是將class為page-state-container之后的view全部隱藏友鼻。如果模板之后想隱藏的不是view可以定義一個(gè)新class傻昙。我一般都用view作為container,所以這里就直接寫了view彩扔。為了使內(nèi)容豎直居中妆档,我將所有頁面都設(shè)置了最小高度為100%,暫時(shí)還沒發(fā)現(xiàn)什么副作用虫碉,發(fā)現(xiàn)的朋友可以在評(píng)論中指出贾惦。

最后把它導(dǎo)入到app.wxss中,以便在全局范圍內(nèi)使用敦捧。

/**app.wxss**/
@import 'utils/pageState/index.wxss';

js

// utils/pageState/index.js
const loading = (that) => {
  return () => {
    that.setData({
      pageState: {
        state: 'loading',
        message: '加載中'
      }
    })
  }
}

const error = (that, message) => {
  return (message = '請(qǐng)檢查您的網(wǎng)絡(luò)連接') => {
    that.setData({
      pageState: {
        state: 'error',
        message
      }
    })
  }
}

const empty = (that, message) => {
  return (message = '空空如也') => {
    that.setData({
      pageState: {
        state: 'empty',
        message
      }
    })
  }
}

const finish = (that) => {
  return () => {
    that.setData({
      pageState: {
        state: 'finish',
        message: ''
      }
    })
  }
}

export default (that) => {
  return {
    loading: loading(that),
    error: error(that),
    empty: empty(that),
    finish: finish(that)
  }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末须板,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子兢卵,更是在濱河造成了極大的恐慌习瑰,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件秽荤,死亡現(xiàn)場(chǎng)離奇詭異甜奄,居然都是意外死亡柠横,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門课兄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來牍氛,“玉大人,你說我怎么就攤上這事烟阐“峥。” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵蜒茄,是天一觀的道長唉擂。 經(jīng)常有香客問我,道長扩淀,這世上最難降的妖魔是什么楔敌? 我笑而不...
    開封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮驻谆,結(jié)果婚禮上卵凑,老公的妹妹穿的比我還像新娘。我一直安慰自己胜臊,他們只是感情好勺卢,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著象对,像睡著了一般黑忱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上勒魔,一...
    開封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天甫煞,我揣著相機(jī)與錄音,去河邊找鬼冠绢。 笑死抚吠,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的弟胀。 我是一名探鬼主播楷力,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼孵户!你這毒婦竟也來了萧朝?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤夏哭,失蹤者是張志新(化名)和其女友劉穎检柬,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體竖配,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡何址,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年酱固,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片头朱。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖龄减,靈堂內(nèi)的尸體忽然破棺而出项钮,到底是詐尸還是另有隱情,我是刑警寧澤希停,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布烁巫,位于F島的核電站,受9級(jí)特大地震影響宠能,放射性物質(zhì)發(fā)生泄漏亚隙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一违崇、第九天 我趴在偏房一處隱蔽的房頂上張望阿弃。 院中可真熱鬧,春花似錦羞延、人聲如沸渣淳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽入愧。三九已至,卻和暖如春嗤谚,著一層夾襖步出監(jiān)牢的瞬間棺蛛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來泰國打工巩步, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留旁赊,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓渗钉,卻偏偏與公主長得像彤恶,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鳄橘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 作者:葉小釵www.cnblogs.com/yexiaochai/p/9431816.html 首先我們來一言以蔽...
    grain先森閱讀 922評(píng)論 0 8
  • 每天的學(xué)習(xí)記錄声离,可能有的地方寫的不對(duì),因?yàn)閯倢W(xué)瘫怜,以后發(fā)現(xiàn)錯(cuò)的話會(huì)回來改掉整體流程 https://develope...
    有點(diǎn)健忘閱讀 4,637評(píng)論 0 7
  • 張?jiān)蔓悅€(gè)人規(guī)畫 使命:清明术徊,自在, 支持身邊的人活出自己本有的生命狀態(tài)鲸湃。 愿景:每個(gè)人都面帶微笑赠涮,敞開心扉子寓,喜悅,...
  • 人生路漫漫笋除,有你的陪伴斜友。有你的嘮叨,再難走的路垃它,在長的路鲜屏,我也會(huì)微笑著走下去。 忘不了你的嘮叨国拇,把我的生活照顧的無...
    任英姿閱讀 1,125評(píng)論 0 0
  • 功名和利祿算得了什么洛史?在生死面前,功名利祿皆可拋酱吝! 人生的悲哀并不在于看不穿生死也殖,而是在于即便你看穿了生死,還是得...
    驚鴻仙子閱讀 206評(píng)論 0 0