您好,登錄后才能下訂單哦!
這篇文章主要介紹了小程序app.js生命周期實例分析的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇小程序app.js生命周期實例分析文章都會有所收獲,下面我們一起來看看吧。
App() 必須在 app.js 中注冊,且不能注冊多個。所以App()方法在一個小程序中有且僅有一個。
App() 函數用來注冊一個小程序。接受一個 object 參數,其指定小程序的生命周期函數等。先上代碼:
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 參數。
通過表格的形式看App()中的object參數說明:
屬性 | 類型 | 描述 | 觸發時機 |
---|---|---|---|
onLaunch | Function | 生命周期函數–監聽小程序初始化 | 當小程序初始化完成時,會觸發 onLaunch(全局只觸發一次)。 |
onShow | Function | 生命周期函數–監聽小程序顯示 | 當小程序啟動,或從后臺進入前臺顯示,會觸發 onShow |
onHide | Function | 生命周期函數–監聽小程序隱藏 | 當小程序從前臺進入后臺,會觸發 onHide |
onError | Function | 錯誤監聽函數 | 當小程序發生腳本錯誤,或者 api 調用失敗時,會觸發 onError 并帶上錯誤信息 |
其他 | Any | 開發者可以添加任意的函數或數據到 Object 參數中,用 this 可以訪問,上面的getPics就是函數, globalName是數據,這里面的函數和數據都是全局的。調用方式:在Pager中通過getApp()方法得到App對象并獲得全局的數據和調用全局的函數 |
將原有的app.js中替換為上面的代碼,首次打開小程序,可以在Log信息中看到以下Log信息,會看到onShow()方法會執行兩次
App onLaunch App onShow() App onShow()
前臺、后臺定義: 當用戶點擊左上角關閉,或者按了設備 Home 鍵離開微信,小程序并沒有直接銷毀,而是進入了后臺;當再次進入微信或再次打開小程序,又會從后臺進入前臺。
只有當小程序進入后臺一定時間,或者系統資源占用過高,才會被真正的銷毀。
注意:
1.不要在定義于 App() 內的函數中調用 getApp() ,使用 this 就可以拿到 app 實例。
2.不要在 onLaunch 的時候調用 getCurrentPage(),此時 page 還沒有生成。
3.通過 getApp() 獲取實例之后,不要私自調用生命周期函數。
Page() 函數用來注冊一個頁面。接受一個 object 參數,其指定頁面的初始數據、生命周期函數、事件處理函數等。
生命周期函數
onLoad: 頁面加載 一個頁面只會調用一次。 接收頁面參數 可以獲取wx.navigateTo和wx.redirectTo及中的 query。 onShow: 頁面顯示 每次打開頁面都會調用一次。 onReady: 頁面初次渲染完成 一個頁面只會調用一次,代表頁面已經準備妥當,可以和視圖層進行交互。 onHide: 頁面隱藏 當navigateTo或底部tab切換時調用。 onUnload: 頁面卸載 當redirectTo或navigateBack的時候調用。1234567891011121314151617
其中APP的生命周期和頁面的生命周期是相互交叉的:舉例:
我們有頁面Test和Test1,我們在test.js,test1.js和App.js的生命周期方法中都打印log,代碼如下:
test1.js
Page({ data:{ names:"tangdekun test1" }, onLoad:function(options){ // 生命周期函數--監聽頁面加載 console.log("test1 onLoad"); }, onReady:function(){ // 生命周期函數--監聽頁面初次渲染完成 console.log("test1 onReady"); }, onShow:function(){ // 生命周期函數--監聽頁面顯示 console.log("test1 onShow"); }, onHide:function(){ // 生命周期函數--監聽頁面隱藏 console.log("test1 onHide"); }, onUnload:function(){ // 生命周期函數--監聽頁面卸載 console.log("test1 onUnload"); }, onPullDownRefresh: function() { // 頁面相關事件處理函數--監聽用戶下拉動作 console.log("test1 onPullDownRefresh"); }, onReachBottom: function() { // 頁面上拉觸底事件的處理函數 console.log("test1 onReachBottom"); } })
test.js
Page({ data:{ name:"test" }, onLoad:function(options){ // 生命周期函數--監聽頁面加載 console.log("test onLoad"); }, onReady:function(){ // 生命周期函數--監聽頁面初次渲染完成 console.log("test onReady"); }, onShow:function(){ // 生命周期函數--監聽頁面顯示 console.log("test onShow"); }, onHide:function(){ // 生命周期函數--監聽頁面隱藏 console.log("test onHide"); }, onUnload:function(){ // 生命周期函數--監聽頁面卸載 console.log("test onUnload"); }, onPullDownRefresh: function() { // 頁面相關事件處理函數--監聽用戶下拉動作 console.log("test onPullDownRefresh"); }, onReachBottom: function() { // 頁面上拉觸底事件的處理函數 console.log("test onReachBottom"); }, onShareAppMessage: function() { // 用戶點擊右上角分享 return { title: '分享頁面', // 分享標題 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頁面設置為首頁【在app.json中設置】,程序會自動加載test頁面,調用test.js中的生命周期方法,打印Log信息如下:
然后點擊菜單欄【作業中心】test1,會調用test 的onHide,test1的onLoad,onShow,onReady,打印Log信息如下:
在點擊【朋友圈】test,會調用test1的onHide方法,test的onshow方法,而不會調用test的onLoad,onReady方法,log信息如下:
通過實例我們一起理解一下官方的小程序頁面的生命周期:
View thread是我們的wxml文件,AppServiceThread就是我們js文件中研究的頁面的生命周期。這里我們可以看到每個生命周期方法的調用順序以及和Wxml之間的信息交流。大家可以簡略的看一下就好。
因為頁面的生命周期和頁面的路由【即頁面之間的跳轉方式】有關,所以接下來我會向大家展示頁面跳轉的三種方式和各種跳轉方式之下的生命周期方法的調度。
關于“小程序app.js生命周期實例分析”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“小程序app.js生命周期實例分析”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。