微信小程序 生命周期

小程序的生命周期分為 app.js 管理的生命周期舶斧、每個(gè)page的生命周期负芋。

app.js 管理的生命周期

App() 函數(shù)用來(lái)注冊(cè)一個(gè)小程序消别。接收一個(gè)object參數(shù)算柳,指定生命周期函數(shù)低淡。App() 只能在app.js里面注冊(cè)且只能注冊(cè)一個(gè)。

object 參數(shù)說(shuō)明:

屬性 描述 觸發(fā)機(jī)制
onLaunch 監(jiān)聽(tīng)小程序初始化 當(dāng)小程序初始化完成時(shí)瞬项,觸發(fā)一次蔗蹋。(全局只觸發(fā)一次)
onShow 監(jiān)聽(tīng)小程序顯示 初始化完成 或 后臺(tái)進(jìn)入前臺(tái)顯示,觸發(fā)onShow
onHide 監(jiān)聽(tīng)小程序隱藏 前臺(tái)進(jìn)入后臺(tái)會(huì)觸發(fā)onHide(點(diǎn)擊后退按鈕 或 Home鍵返回桌面)
其他 可以添加任意的函數(shù)或者數(shù)據(jù)到object中 用 this 可以訪問(wèn)

小程序quickStart囱淋,在app.js自動(dòng)生成的App函數(shù):

//app.js
App({
  onLaunch: function () {
    // 展示本地存儲(chǔ)能力
    var logs = wx.getStorageSync('logs') || []
    logs.unshift(Date.now())
    wx.setStorageSync('logs', logs)

    // 登錄
    wx.login({
      success: res => {
        // 發(fā)送 res.code 到后臺(tái)換取 openId, sessionKey, unionId
      }
    })
    // 獲取用戶信息
    wx.getSetting({
      success: res => {
        if (res.authSetting['scope.userInfo']) {
          // 已經(jīng)授權(quán)猪杭,可以直接調(diào)用 getUserInfo 獲取頭像昵稱,不會(huì)彈框
          wx.getUserInfo({
            success: res => {
              // 可以將 res 發(fā)送給后臺(tái)解碼出 unionId
              this.globalData.userInfo = res.userInfo

              // 由于 getUserInfo 是網(wǎng)絡(luò)請(qǐng)求妥衣,可能會(huì)在 Page.onLoad 之后才返回
              // 所以此處加入 callback 以防止這種情況
              if (this.userInfoReadyCallback) {
                this.userInfoReadyCallback(res)
              }
            }
          })
        }
      }
    })
  },
  globalData: {
    userInfo: null
  }
})
注意事項(xiàng):
  • 必須在app.js中注冊(cè)皂吮,只能注冊(cè)一個(gè)
  • 不要在定義于app()內(nèi)函數(shù)中調(diào)用 getApp(),使用 this 就可以拿到app實(shí)例
  • 不要在onLaunch的時(shí)候調(diào)用 getCurrentPage税手,此時(shí)page還沒(méi)生效
  • 通過(guò) getApp() 獲取實(shí)例后蜂筹,不要自己調(diào)用生命周期函數(shù)

頁(yè)面的生命周期

Page() 函數(shù)用來(lái)注冊(cè)一個(gè)頁(yè)面。接受一個(gè) object 參數(shù)芦倒,實(shí)現(xiàn)頁(yè)面的初始數(shù)據(jù)艺挪、生命周期函數(shù)、事件處理函數(shù)等兵扬。

// pages/test/test.js
Page({

  /**
   * 頁(yè)面的初始數(shù)據(jù)
   */
  data: {

  },

  /**
   * 生命周期函數(shù)--監(jiān)聽(tīng)頁(yè)面加載
   */
  onLoad: function (options) {

  },

  /**
   * 生命周期函數(shù)--監(jiān)聽(tīng)頁(yè)面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函數(shù)--監(jiān)聽(tīng)頁(yè)面顯示
   */
  onShow: function () {

  },

  /**
   * 生命周期函數(shù)--監(jiān)聽(tīng)頁(yè)面隱藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函數(shù)--監(jiān)聽(tīng)頁(yè)面卸載
   */
  onUnload: function () {

  },

  /**
   * 頁(yè)面相關(guān)事件處理函數(shù)--監(jiān)聽(tīng)用戶下拉動(dòng)作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 頁(yè)面上拉觸底事件的處理函數(shù)
   */
  onReachBottom: function () {

  },

  /**
   * 用戶點(diǎn)擊右上角分享
   */
  onShareAppMessage: function () {

  }
})
生命周期函數(shù):
  • 對(duì)頁(yè)面的設(shè)置(如wx.setNavigationBarTitle)在 onReady 之后設(shè)置麻裳。
  • onLoad函數(shù)中口蝠,參數(shù)可以獲取 wx.navigationTowx.redirectTo<navigator/> 中的 query 。
函數(shù) 說(shuō)明
onLoad 頁(yè)面加載津坑,一個(gè)頁(yè)面加載一次
onShow 頁(yè)面顯示妙蔗,每次打開(kāi)頁(yè)面時(shí)調(diào)用
onReady 頁(yè)面初次渲染完成,一個(gè)頁(yè)面只會(huì)調(diào)用一次疆瑰,代表頁(yè)面已經(jīng)準(zhǔn)備妥當(dāng)灭必,可以和視圖層進(jìn)行交互。
onHide 頁(yè)面隱藏乃摹,當(dāng)navigationTo或底部tab切換時(shí)調(diào)用。
onUnload 頁(yè)面卸載跟衅,當(dāng)redirectTo和navigateBack時(shí)調(diào)用孵睬。
頁(yè)面相關(guān)事件處理函數(shù)
  • onPullDownRefresh: 需要在window選項(xiàng)中添加 enablePullDownRefresh。當(dāng)處理完數(shù)據(jù)刷新后伶跷,wx.stopPullDownRefresh 可以停止當(dāng)前頁(yè)面的下拉刷新掰读。

  • onReachBottom: 上拉刷新事件。頁(yè)面上拉觸及底部的事件處理叭莫。

  • onShareAppMessage: 用戶點(diǎn)擊右上角轉(zhuǎn)發(fā)事件蹈集。只有定義了這個(gè)事件左上角才會(huì)有轉(zhuǎn)發(fā)Button,事件需要return一個(gè) object 雇初,用于自定義轉(zhuǎn)發(fā)內(nèi)容拢肆。自定義轉(zhuǎn)發(fā) titlepathpath 必須是以 / 開(kāi)頭的完整路徑靖诗。

  • onPageScroll: 頁(yè)面滾動(dòng)觸發(fā)事件的處理函數(shù)郭怪,參數(shù)是scrollTo(Number類型),表示頁(yè)面在垂直方向已滾動(dòng)距離(單位:px)刊橘。

使用代碼如下:

Page(
  {
    onPullDownRefresh: function () {
      console.log("onPullDownRefresh" + new Date())
    },
    stopPullDownRefresh: function () {
      wx.stopPullDownReferesh({
        complete: function (res) {
          console.log(res + new Date() )
        }
      })
    },
    onShareAppMessage: function () {
      return
        {
          title: '自定義轉(zhuǎn)發(fā)標(biāo)題',
          path: '/page/user?id=123'
        }
    },
  }
)
事件處理函數(shù)

在渲染層可以在組件中加入事件綁定鄙才,當(dāng)達(dá)到觸發(fā)事件時(shí),就會(huì)執(zhí)行 Page 中定義的事件處理函數(shù)促绵。

  • Page.prototype.route: 獲取當(dāng)前頁(yè)面路徑攒庵。
  • Page.prototype.setData: 改變 this.data 的值,單次設(shè)置的數(shù)據(jù)不超過(guò)1024k败晴,盡量避免一次設(shè)置過(guò)多的數(shù)據(jù)浓冒。
  • 文件作用域和模塊化:
    • js頁(yè)面文件中聲明的變量和函數(shù)值在該文件中有效,不同的文件中可以聲明相同名字的變量和函數(shù)尖坤,不會(huì)相互影響裆蒸。
    • 全局?jǐn)?shù)據(jù)可以在App()中設(shè)置。
    • 提供函數(shù)給其他頁(yè)面使用糖驴,小程序 js 模塊只有通過(guò) moudle.exports 暴露接口僚祷,其他 js 頁(yè)面才可以引入引用佛致。
      在 util.js 里面有exports的應(yīng)用
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市辙谜,隨后出現(xiàn)的幾起案子俺榆,更是在濱河造成了極大的恐慌,老刑警劉巖装哆,帶你破解...
    沈念sama閱讀 211,948評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件罐脊,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蜕琴,警方通過(guò)查閱死者的電腦和手機(jī)萍桌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)凌简,“玉大人上炎,你說(shuō)我怎么就攤上這事〕В” “怎么了藕施?”我有些...
    開(kāi)封第一講書人閱讀 157,490評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)凸郑。 經(jīng)常有香客問(wèn)我裳食,道長(zhǎng),這世上最難降的妖魔是什么芙沥? 我笑而不...
    開(kāi)封第一講書人閱讀 56,521評(píng)論 1 284
  • 正文 為了忘掉前任诲祸,我火速辦了婚禮,結(jié)果婚禮上而昨,老公的妹妹穿的比我還像新娘烦绳。我一直安慰自己,他們只是感情好配紫,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布径密。 她就那樣靜靜地躺著,像睡著了一般躺孝。 火紅的嫁衣襯著肌膚如雪享扔。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,842評(píng)論 1 290
  • 那天植袍,我揣著相機(jī)與錄音惧眠,去河邊找鬼。 笑死于个,一個(gè)胖子當(dāng)著我的面吹牛氛魁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,997評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼秀存,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼捶码!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起或链,我...
    開(kāi)封第一講書人閱讀 37,741評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤惫恼,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后澳盐,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體祈纯,經(jīng)...
    沈念sama閱讀 44,203評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評(píng)論 2 327
  • 正文 我和宋清朗相戀三年叼耙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了腕窥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,673評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡筛婉,死狀恐怖簇爆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情倾贰,我是刑警寧澤,帶...
    沈念sama閱讀 34,339評(píng)論 4 330
  • 正文 年R本政府宣布拦惋,位于F島的核電站匆浙,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏厕妖。R本人自食惡果不足惜首尼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望言秸。 院中可真熱鬧软能,春花似錦、人聲如沸举畸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,770評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)抄沮。三九已至跋核,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間叛买,已是汗流浹背砂代。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,000評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留率挣,地道東北人刻伊。 一個(gè)月前我還...
    沈念sama閱讀 46,394評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親捶箱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子智什,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評(píng)論 2 349

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

  • 小程序生命周期 運(yùn)行機(jī)制 小程序什么時(shí)候會(huì)被銷毀 當(dāng)小程序進(jìn)入后臺(tái),客戶端會(huì)維持一段時(shí)間的運(yùn)行狀態(tài)讼呢,超過(guò)一定時(shí)間后...
    皮皮坤666閱讀 18,300評(píng)論 8 33
  • 1.小程序起步 (1)點(diǎn)擊https://mp.weixin.qq.com/wxopen/waregister?a...
    GXW_Lyon閱讀 3,323評(píng)論 0 0
  • 跟APP一樣悦屏,微信小程序也有自己的生命周期节沦,了解微信小程序的生命周期對(duì)于小程序開(kāi)發(fā)者來(lái)說(shuō)非常重要,關(guān)系到什么時(shí)候加...
    JairusTse閱讀 2,528評(píng)論 0 5
  • 近年來(lái)的框架都很喜歡使用生命周期這個(gè)概念础爬。生命周期就是按照一定的順序執(zhí)行代碼甫贯。其他框架的生命周期可能理解有點(diǎn)麻煩朴皆,...
    風(fēng)之旅途閱讀 341評(píng)論 0 0
  • 0笆制、雜記 0.1、在實(shí)際的開(kāi)發(fā)中逞度,圖片資源不會(huì)存儲(chǔ)在小程序的目錄中供炎,因?yàn)樾〕绦虻拇笮〔荒艹^(guò)1MB(現(xiàn)在改為2M)...
    it筱竹閱讀 5,326評(píng)論 0 10