微信小程序 生命周期

App()

App() 函數(shù)用來注冊一個小程序蝇庭。接受一個 object 參數(shù),其指定小程序的生命周期函數(shù)等旋恼。

object參數(shù)說明:


1.png

前臺乘陪、后臺定義: 當用戶點擊左上角關(guān)閉统台,或者按了設(shè)備 Home 鍵離開微信,小程序并沒有直接銷毀啡邑,而是進入了后臺贱勃;當再次進入微信或再次打開小程序,又會從后臺進入前臺。

只有當小程序進入后臺一定時間贵扰,或者系統(tǒng)資源占用過高仇穗,才會被真正的銷毀。

示例代碼:

App({
  onLaunch: function() { 
    // Do something initial when launch.
  },
  onShow: function() {
      // Do something when show.
  },
  onHide: function() {
      // Do something when hide.
  },
  globalData: 'I am global data'
})
App.prototype.getCurrentPage()

getCurrentPage() 函數(shù)用戶獲取當前頁面的實例戚绕。

getApp()

我們提供了全局的 getApp() 函數(shù)纹坐,可以獲取到小程序?qū)嵗?/p>

// other.js
var appInstance = getApp()
console.log(appInstance.globalData) // I am global data

注意:

App() 必須在 app.js 中注冊,且不能注冊多個舞丛。

不要在定義于 App() 內(nèi)的函數(shù)中調(diào)用 getApp() 耘子,使用 this 就可以拿到 app 實例。

不要在 onLaunch 的時候調(diào)用 getCurrentPage()球切,此時 page 還沒有生成谷誓。

通過 getApp() 獲取實例之后,不要私自調(diào)用生命周期函數(shù)吨凑。

Page

Page() 函數(shù)用來注冊一個頁面捍歪。接受一個 object 參數(shù),其指定頁面的初始數(shù)據(jù)怀骤、生命周期函數(shù)费封、事件處理函數(shù)等。

object 參數(shù)說明:


2.png

示例代碼:

//index.js
Page({
  data: {
    text: "This is page data."
  },
  onLoad: function(options) {
    // Do some initialize when page load.
  },
  onReady: function() {
    // Do something when page ready.
  },
  onShow: function() {
    // Do something when page show.
  },
  onHide: function() {
    // Do something when page hide.
  },
  onUnload: function() {
    // Do something when page close.
  },
  onPullDownRefresh: function() {
    // Do something when pull down
  },
  // Event handler.
  viewTap: function() {
    this.setData({
      text: 'Set some data for updating view.'
    })
  }
})
初始化數(shù)據(jù)

初始化數(shù)據(jù)將作為頁面的第一次渲染蒋伦。data 將會以 JSON 的形式由邏輯層傳至渲染層,所以其數(shù)據(jù)必須是可以轉(zhuǎn)成 JSON 的格式:字符串焚鹊,數(shù)字痕届,布爾值,對象末患,數(shù)組研叫。

渲染層可以通過 WXML 對數(shù)據(jù)進行綁定。

示例代碼:

    <view>{{text}}</view>
    <view>{{array[0].msg}}</view>

    Page({
      data: {
        text: 'init data',
        array: [{msg: '1'}, {msg: '2'}]
      }
    })
生命周期函數(shù)

onLoad: 頁面加載

一個頁面只會調(diào)用一次璧针。
參數(shù)可以獲取wx.navigateTo和wx.redirectTo及<navigator/>中的 query嚷炉。

onShow: 頁面顯示

每次打開頁面都會調(diào)用一次。

onReady: 頁面初次渲染完成

一個頁面只會調(diào)用一次探橱,代表頁面已經(jīng)準備妥當申屹,可以和視圖層進行交互。
對界面的設(shè)置如wx.setNavigationBarTitle請在onReady之后設(shè)置隧膏。詳見生命周期

onHide: 頁面隱藏

當navigateTo或底部tab切換時調(diào)用哗讥。

onUnload: 頁面卸載

當redirectTo或navigateBack的時候調(diào)用。
頁面相關(guān)事件處理函數(shù)
  • onPullDownRefresh: 下拉刷新
    • 監(jiān)聽用戶下拉刷新事件胞枕。
    • 需要在configwindow選項中開啟enablePullDownRefresh杆煞。
    • 當處理完數(shù)據(jù)刷新后,wx.stopPullDownRefresh可以停止當前頁面的下拉刷新。
事件處理函數(shù)

除了初始化數(shù)據(jù)和生命周期函數(shù)决乎,Page 中還可以定義一些特殊的函數(shù):事件處理函數(shù)队询。在渲染層可以在組件中加入事件綁定,當達到觸發(fā)事件時构诚,就會執(zhí)行 Page 中定義的事件處理函數(shù)蚌斩。

示例代碼:

<view bindtap="viewTap"> click me </view>
    Page({
      viewTap: function() {
        console.log('view tap')
      }
    })
Page.prototype.setData()

setData 函數(shù)用于將數(shù)據(jù)從邏輯層發(fā)送到視圖層,同時改變對應的 this.data 的值唤反。

注意:

1.直接修改 this.data 無效凳寺,無法改變頁面的狀態(tài),還會造成數(shù)據(jù)不一致彤侍。
2.單次設(shè)置的數(shù)據(jù)不能超過1024kB肠缨,請盡量避免一次設(shè)置過多的數(shù)據(jù)。
setData() 參數(shù)格式

接受一個對象盏阶,以 key晒奕,value 的形式表示將 this.data 中的 key 對應的值改變成 value。

其中 key 可以非常靈活名斟,以數(shù)據(jù)路徑的形式給出脑慧,如 array[2].message,a.b.c.d砰盐,并且不需要在 this.data 中預先定義闷袒。

示例代碼:

    <!--index.wxml-->
    <view>{{text}}</view>
    <button bindtap="changeText"> Change normal data </button>
    <view>{{array[0].text}}</view>
    <button bindtap="changeItemInArray"> Change Array data </button>
    <view>{{obj.text}}</view>
    <button bindtap="changeItemInObject"> Change Object data </button>
    <view>{{newField.text}}</view>
    <button bindtap="addNewField"> Add new data </button>

    //index.js
    Page({
      data: {
        text: 'init data',
        array: [{text: 'init data'}],
        object: {
          text: 'init data'
        }
      },
      changeText: function() {
        // this.data.text = 'changed data'  // bad, it can not work
        this.setData({
          text: 'changed data'
        })
      },
      changeItemInArray: function() {
        // you can use this way to modify a danamic data path
        this.setData({
          'array[0].text':'changed data'
        })
      },
      changeItemInObject: function(){
        this.setData({
          'object.text': 'changed data'
        });
      },
      addNewField: function() {
        this.setData({
          'newField.text': 'new data'
        })
      }
    })

以下內(nèi)容你不需要立馬完全弄明白,不過以后它會有幫助岩梳。

生命周期

下圖說明了 Page 實例的生命周期囊骤。


image
頁面的路由

在小程序中所有頁面的路由全部由框架進行管理,對于路由的觸發(fā)方式以及頁面生命周期函數(shù)如下:


100043.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末冀值,一起剝皮案震驚了整個濱河市也物,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌列疗,老刑警劉巖滑蚯,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異抵栈,居然都是意外死亡告材,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進店門竭讳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來创葡,“玉大人,你說我怎么就攤上這事绢慢〔涌剩” “怎么了洛波?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長骚露。 經(jīng)常有香客問我蹬挤,道長,這世上最難降的妖魔是什么棘幸? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任焰扳,我火速辦了婚禮,結(jié)果婚禮上误续,老公的妹妹穿的比我還像新娘吨悍。我一直安慰自己,他們只是感情好蹋嵌,可當我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布育瓜。 她就那樣靜靜地躺著,像睡著了一般栽烂。 火紅的嫁衣襯著肌膚如雪躏仇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天腺办,我揣著相機與錄音焰手,去河邊找鬼。 笑死怀喉,一個胖子當著我的面吹牛书妻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播躬拢,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼驻子,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了估灿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤缤剧,失蹤者是張志新(化名)和其女友劉穎馅袁,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體荒辕,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡汗销,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了抵窒。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片弛针。...
    茶點故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖李皇,靈堂內(nèi)的尸體忽然破棺而出削茁,到底是詐尸還是另有隱情宙枷,我是刑警寧澤,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布茧跋,位于F島的核電站慰丛,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏瘾杭。R本人自食惡果不足惜诅病,卻給世界環(huán)境...
    茶點故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望粥烁。 院中可真熱鬧贤笆,春花似錦、人聲如沸讨阻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽变勇。三九已至恤左,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間搀绣,已是汗流浹背飞袋。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留链患,地道東北人巧鸭。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像麻捻,于是被迫代替她去往敵國和親纲仍。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,554評論 2 349

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

  • 小程序的生命周期分為 app.js 管理的生命周期贸毕、每個page的生命周期郑叠。 app.js 管理的生命周期 App...
    Karaio閱讀 1,252評論 0 1
  • 小程序生命周期 運行機制 小程序什么時候會被銷毀 當小程序進入后臺,客戶端會維持一段時間的運行狀態(tài),超過一定時間后...
    皮皮坤666閱讀 18,300評論 8 33
  • 1、小程序的生命周期(App.js) App() 必須在 app.js 中注冊迫皱,且不能注冊多個。所以App()方法...
    兜里沒糖閱讀 696評論 1 2
  • 跟APP一樣沸版,微信小程序也有自己的生命周期,了解微信小程序的生命周期對于小程序開發(fā)者來說非常重要兴蒸,關(guān)系到什么時候加...
    JairusTse閱讀 2,528評論 0 5
  • 嘉賓:檢察官视粮、法官、學者橙凳、法科生蕾殴、普通民眾 檢:大家好笑撞,我是內(nèi)蒙古通遼市檢察院的一名普通檢察官。我這次春節(jié)前后到內(nèi)...
    翱翔的飛燕閱讀 372評論 0 0