商城系統(tǒng) 注冊

關(guān)于小程序app.js生命周期的介紹

2020-09-27|HiShop
導(dǎo)讀:1.小程序的生命周期App.js App() 必須在 app.js 中注冊,且不能注冊多個。所以App()方法在一個小程序中有且僅有一個。 App() 函數(shù)用來注冊一個小程序。接受一個 object 參數(shù),其指定小程...

小程序的生命周期——App.js

關(guān)于小程序app.js生命周期的介紹

App() 必須在 app.js 中注冊,且不能注冊多個。所以App()方法在一個小程序中有且僅有一個。

App() 函數(shù)用來注冊一個小程序。接受一個 object 參數(shù),其指定小程序的生命周期函數(shù)等。先上代碼:

App({
  onLaunch: function () {
      console.log('App onLaunch');

  },

  onShow:function (){
     console.log('App onShow');

  },

  onHide:function(){
      console.log('App onHide');

  },
  onError:function(){
     console.log('App onError');

  },

  getPics: function() {
      return this.globalData.picList;
  },
  globalData:{
      picList: [] // 圖片列表
  },

  globalName: 'tangdekun'

});

最外層的整個{ }就是一個object 參數(shù)。

通過表格的形式看App()中的object參數(shù)說明:

屬性 類型 描述 觸發(fā)時機
onLaunch Function 生命周期函數(shù)–監(jiān)聽小程序初始化 當(dāng)小程序初始化完成時,會觸發(fā) onLaunch(全局只觸發(fā)一次)。
onShow Function 生命周期函數(shù)–監(jiān)聽小程序顯示 當(dāng)小程序啟動,或從后臺進(jìn)入前臺顯示,會觸發(fā) onShow
onHide Function 生命周期函數(shù)–監(jiān)聽小程序隱藏 當(dāng)小程序從前臺進(jìn)入后臺,會觸發(fā) onHide
onError Function 錯誤監(jiān)聽函數(shù) 當(dāng)小程序發(fā)生腳本錯誤,或者 api 調(diào)用失敗時,會觸發(fā) onError 并帶上錯誤信息
其他 Any   開發(fā)者可以添加任意的函數(shù)或數(shù)據(jù)到 Object 參數(shù)中,用 this 可以訪問,上面的getPics就是函數(shù), globalName是數(shù)據(jù),這里面的函數(shù)和數(shù)據(jù)都是全局的。調(diào)用方式:在Pager中通過getApp()方法得到App對象并獲得全局的數(shù)據(jù)和調(diào)用全局的函數(shù)

將原有的app.js中替換為上面的代碼,首次打開小程序,可以在Log信息中看到以下Log信息,會看到onShow()方法會執(zhí)行兩次

App onLaunch App onShow() App onShow()

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

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

注意:

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

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

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

2.頁面的生命周期

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

生命周期函數(shù)

onLoad: 頁面加載
    一個頁面只會調(diào)用一次。
    接收頁面參數(shù)   可以獲取wx.navigateTo和wx.redirectTo及中的 query。

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

onReady: 頁面初次渲染完成
    一個頁面只會調(diào)用一次,代表頁面已經(jīng)準(zhǔn)備妥當(dāng),可以和視圖層進(jìn)行交互。


onHide: 頁面隱藏
    當(dāng)navigateTo或底部tab切換時調(diào)用。

onUnload: 頁面卸載
    當(dāng)redirectTo或navigateBack的時候調(diào)用。
  • 1234567891011121314151617

其中APP的生命周期和頁面的生命周期是相互交叉的:舉例:

我們有頁面Test和Test1,我們在test.js,test1.js和App.js的生命周期方法中都打印log,代碼如下:

test1.js

Page({
  data:{
    names:"tangdekun test1"
  },
  onLoad:function(options){
    // 生命周期函數(shù)--監(jiān)聽頁面加載
    console.log("test1 onLoad");
  },
  onReady:function(){
    // 生命周期函數(shù)--監(jiān)聽頁面初次渲染完成
    console.log("test1 onReady");
  },
  onShow:function(){
    // 生命周期函數(shù)--監(jiān)聽頁面顯示
   console.log("test1 onShow");
  },
  onHide:function(){
    // 生命周期函數(shù)--監(jiān)聽頁面隱藏
     console.log("test1 onHide");
  },
  onUnload:function(){
    // 生命周期函數(shù)--監(jiān)聽頁面卸載
     console.log("test1 onUnload");
  },
  onPullDownRefresh: function() {
    // 頁面相關(guān)事件處理函數(shù)--監(jiān)聽用戶下拉動作
     console.log("test1 onPullDownRefresh");
  },
  onReachBottom: function() {
    // 頁面上拉觸底事件的處理函數(shù)
     console.log("test1 onReachBottom");
  }

})

test.js

Page({
  data:{
    name:"test"
  },
  onLoad:function(options){
    // 生命周期函數(shù)--監(jiān)聽頁面加載
    console.log("test onLoad");
  },
  onReady:function(){
    // 生命周期函數(shù)--監(jiān)聽頁面初次渲染完成
    console.log("test onReady");
  },
  onShow:function(){
    // 生命周期函數(shù)--監(jiān)聽頁面顯示
   console.log("test onShow");
  },
  onHide:function(){
    // 生命周期函數(shù)--監(jiān)聽頁面隱藏
     console.log("test onHide");
  },
  onUnload:function(){
    // 生命周期函數(shù)--監(jiān)聽頁面卸載
     console.log("test onUnload");
  },
  onPullDownRefresh: function() {
    // 頁面相關(guān)事件處理函數(shù)--監(jiān)聽用戶下拉動作
     console.log("test onPullDownRefresh");
  },
  onReachBottom: function() {
    // 頁面上拉觸底事件的處理函數(shù)
     console.log("test onReachBottom");
  },
  onShareAppMessage: function() {
    // 用戶點擊右上角分享
    return {
      title: '分享頁面', // 分享標(biāo)題
      desc: '這是一個分享的測試', // 分享描述
      path: 'pages/waimai/waimai' // 分享路徑
    }
  },
  navigateToPageB: function() {
    wx.navigateTo({
      url: '../../pages/pageB/pageB?id=3',
      success: function(res){

      },
      fail: function() {
        // fail
      },
      complete: function() {
        // complete
      }
    })
  },
  redirectToPageA : function(){
    wx.redirectTo({
      url: '../../pages/pageA/pageA?id=4',
      success: function(res){
        // success
      },
      fail: function() {
        // fail
      },
      complete: function() {
        // complete
      }
    })
  },
 switchTabToTest1:function(){
   wx.switchTab({
     url: '../../pages/test1/test1',
     success: function(res){
       // success
     },
     fail: function() {
       // fail
     },
     complete: function() {
       // complete
     }
   })
 } 

})

app.js

//app.js
App({
  onLaunch: function () {
      console.log('App onLaunch');

  },

  onShow:function (){
     console.log('App onShow1'+this.globalName);

  },

  onHide:function(){
      console.log('App onHide');

  },
  onError:function(){
     console.log('App onError');

  },

  getPics: function() {
      return this.globalData.picList;
  },
  globalData:{
      picList: [] // 圖片列表
  },

  globalName: 'tangdekun'

});

我們將test頁面設(shè)置為首頁【在app.json中設(shè)置】,程序會自動加載test頁面,調(diào)用test.js中的生命周期方法,打印Log信息如下:

關(guān)于小程序app.js生命周期的介紹

然后點擊菜單欄【作業(yè)中心】test1,會調(diào)用test 的onHide,test1的onLoad,onShow,onReady,打印Log信息如下:

關(guān)于小程序app.js生命周期的介紹

在點擊【朋友圈】test,會調(diào)用test1的onHide方法,test的onshow方法,而不會調(diào)用test的onLoad,onReady方法,log信息如下:

關(guān)于小程序app.js生命周期的介紹

通過實例我們一起理解一下官方的小程序頁面的生命周期:

關(guān)于小程序app.js生命周期的介紹

View thread是我們的wxml文件,AppServiceThread就是我們js文件中研究的頁面的生命周期。這里我們可以看到每個生命周期方法的調(diào)用順序以及和Wxml之間的信息交流。大家可以簡略的看一下就好。

關(guān)于小程序app.js生命周期的介紹

因為頁面的生命周期和頁面的路由【即頁面之間的跳轉(zhuǎn)方式】有關(guān),所以接下來我會向大家展示頁面跳轉(zhuǎn)的三種方式和各種跳轉(zhuǎn)方式之下的生命周期方法的調(diào)度。

HiShop小程序工具提供多類型商城/門店小程序制作,可視化編輯 1秒生成5步上線。通過拖拽、拼接模塊布局小程序商城頁面,所看即所得,只需要美工就能做出精美商城。更多小程序商店請查看:小程序商店

電話咨詢 預(yù)約演示 0元開店