亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

uni-app 生命周期、語法

1. 前言

本小節我們一起來了解 uni-app 生命周期以及生命周期函數的語法。包括生命周期的幾個階段、觸發機制和執行順序。同學們不僅要理解生命周期的概念,還要知道生命周期從創建到銷毀是怎樣的一個過程。

2. 什么是生命周期

生命周期就是指一個對象生老病死的過程,針對 uni-app 來說,生命周期就是 uni-app 實例從創建、運行到銷毀的過程。

2.1 生命周期分類

uni-app 生命周期包括應用生命周期頁面生命周期

應用生命周期:是控制應用全局的生命周期,監聽應用初始化、啟動、報錯等狀態。只在 App.vue 文件中有效,App.vue 文件是應用配置文件,用來配置 App 全局樣式以及監聽應用生命周期。

頁面生命周期:是控制單個頁面的生命周期,監聽頁面渲染、加載、顯示、下拉、滾動、分享等狀態。

2.2 生命周期函數

在生命周期中的每個階段都會伴隨著一個函數的觸發,從而執行生命周期函數中的具體邏輯代碼,這些函數就被稱為生命周期函數。

下面我們來看一下 uni-app 中都包括哪些生命周期函數。

3. 生命周期函數匯總

3.1 應用生命周期

函數名 說明 應用場景
onLaunch 當 uni-app 應用初始化完成時觸發,全局只觸發一次 一般用于查看用戶是否授權、獲取用戶的設備信息等
onShow 當應用啟動,或從后臺進入前臺顯示時觸發,可以觸發多次 一般用于重新進入應用的消息提示或者數據刷新
onHide 監聽應用從前臺進入后臺 一般用于退出應用時的消息提示
onError 應用報錯時被觸發 用于監測并處理錯誤

前臺、后臺定義:

當我們離開應用時,應用不會被直接銷毀,而是進入了后臺。當我們再次進入到應用時,應用就會從后臺進入前臺。

那應用什么時候會被真正銷毀呢?

當應用進入后臺超過一定時間,或者系統資源占用過高,應用才會被真正的銷毀。再次打開就需要重新初始化啟動應用。

3.2 頁面生命周期

函數名 說明 支持平臺
onLoad 頁面加載時觸發,一個頁面只會調用一次??梢詡鬟f參數,參數說明查看示例 3.2.1 所有
onShow 頁面顯示時觸發,每次打開頁面都會調用一次 所有
onReady 頁面初次渲染完成后觸發,一個頁面只會調用一次 所有
onHide 頁面隱藏時觸發,每次隱藏頁面都會被觸發 所有
onUnload 頁面卸載時觸發 所有
onResize 頁面每次窗口尺寸變化時會被觸發, App、微信小程序
onPullDownRefresh 用戶下拉頁面時觸發,一般用于頁面下拉刷新,查看實例 3.2.2 所有
onReachBottom 頁面上拉滾動觸底時觸發 所有
onTabItemTap 點擊底部 tab 欄時觸發,參數為 Object,參數說明查看實例 3.2.3 微信小程序、百度小程序、H5、App
onShareAppMessage 點擊右上角分享時觸發 微信小程序、百度小程序、字節跳動小程序、支付寶小程序
onPageScroll 頁面滾動時觸發,只監聽頁面垂直滾動 所有
onNavigationBarButtonTap 監聽原生標題欄按鈕點擊事件,參數說明查看實例 3.2.4 App、H5
onBackPress 頁面返回時觸發,查看實例 3.2.5 App、H5
onNavigationBarSearchInputChanged 監聽原生標題欄搜索輸入框輸入內容變化事件 App、H5
onNavigationBarSearchInputConfirmed 監聽原生標題欄搜索輸入框搜索事件 App、H5
onNavigationBarSearchInputClicked 監聽原生標題欄搜索輸入框點擊事件 App、H5

3.2.1 onLoad 參數說明

頁面生命周期函數 onLoad,是頁面最先執行的生命周期函數,如果從上個頁面跳轉到本頁面,可以通過參數 option 傳遞上個頁面的數據。

我們來看一下實例,比如要從首頁(index.vue)跳轉到個人中心頁面(me.vue)。
實例:

//index.vue
//跳轉語句,并在跳轉鏈接上面加上要傳遞的數據
uni.reLaunch({
    url: 'test?name=我是首頁的數據'
});

//me.vue
export default {
    //options參數就是上個頁面傳遞過來的數據
    onLoad: function (options) {
        console.log(options.name);
    }
}

//打印出來的結果
我是首頁的數據

3.2.2 onPullDownRefresh 函數

用于監聽該頁面用戶下拉頁面的動作。

普通頁面下拉不會觸發 onPullDownRefresh 函數,要先在 pages.json 里面,找到當前頁面的 pages 節點,并在 style 選項中將 enablePullDownRefresh 設置為 true,下拉頁面才可以觸發 onPullDownRefresh 函數。

下面來看一下實例,比如我們想開啟首頁(index.vue)的下拉動作。
實例:

//pages.json
{
    "path": "pages/index/index.vue",
    "style": {
        "enablePullDownRefresh": true
    }
}

調用完成 onPullDownRefresh 函數后,用 stopPullDownRefresh 函數可以停止當前頁面的下拉狀態。
實例:

export default{
    onPullDownRefresh(){
        console.log('用戶下拉頁面時觸發')
        uni.stopPullDownRefresh()
    }
}

3.2.3 onTabItemTap 參數說明

屬性 類型 說明
index String 被點擊 tabItem 的序號,從 0 開始
pagePath String 被點擊 tabItem 的頁面路徑
text String 被點擊 tabItem 的按鈕文字

實例:

export default {
    onTabItemTap(options) {
        console.log('被點擊tabItem的序號index:' + options.index)
        console.log('被點擊tabItem的頁面路徑pagePath:' + options.pagePath)
        console.log('被點擊tabItem的按鈕文字text:' + options.text)
    }
}

注意以下幾點:

  • onTabItemTap 常用于點擊當前 tabitem,滾動或刷新當前頁面。如果是點擊不同的 tabitem,一定會觸發頁面切換。
  • 如果想在 App 端實現點擊某個 tabitem 不跳轉頁面,不能使用 onTabItemTap,可以使用 plus.nativeObj.view 放一個區塊蓋住原先的 tabitem,并攔截點擊事件。
  • 在 App 端,從 HBuilderX 1.9 的自定義組件編譯模式才開始支持 onTabItemTap。

3.2.4 onNavigationBarButtonTap 參數說明

屬性 類型 說明
index Number 原生標題欄按鈕數組的下標

實例:

export default {
    onNavigationBarButtonTap(options) {
        console.log('index:' + options.index)
    }
}

3.2.5 onBackPress 參數說明

返回結果的格式是這樣的:event = {from:backbutton、 navigateBack}。
其中 backbutton 表示來源是左上角返回按鈕或 android 返回鍵;navigateBack 表示來源是 uni.navigateBack。

屬性 類型 說明
from String 觸發返回行為的來源:‘backbutton’—— 左上角導航欄按鈕及安卓返回鍵;‘navigateBack’——uni.navigateBack () 方法

實例:

export default {
    onBackPress(options) {
        console.log('from:' + options.from)
    }
}

4. 函數執行順序

我們將生命周期函數放在一起執行,看一下生命周期函數的執行順序是怎樣的

4.1 實例

//App.vue
<script>
    export default {
        onLaunch: function() {
           console.log('應用生命周期onLaunch:應用初始化完成');
        },
        onShow: function() {
            console.log('應用生命周期onShow:應用啟動完成')
        },
        onHide: function() {
            console.log('應用生命周期onHide:應用進入到后臺狀態')
        }
    }
</script>

//首頁index.vue
<template></template>
<script>
    export default {
        onLoad() {
            console.log('頁面生命周期onLoad:頁面加載')
        },
        onShow() {
            console.log('頁面生命周期onShow:頁面顯示')
        },
        onReady(){
            console.log('頁面生命周期onReady:頁面初次渲染完成')
        },
        onHide() {
            console.log('頁面生命周期onHide:頁面隱藏')
        },
        onUnload() {
            console.log('頁面生命周期onUnload:頁面卸載')
        },
        onBackPress(){
            console.log('頁面生命周期onBackPress:頁面返回')
        },
        onShareAppMessage() {
            console.log('頁面生命周期onShareAppMessage:分享頁面')
        },
        onReachBottom() {
            console.log('頁面生命周期onReachBottom:上拉頁面觸底')
        },
        onPageScroll(){
            console.log('頁面生命周期onPageScroll:頁面滾動')
        },
        onPullDownRefresh() {
            console.log('頁面生命周期onPullDownRefresh:下拉頁面')
            uni.stopPullDownRefresh();
        },
        onNavigationBarButtonTap(){
            console.log('頁面生命周期onNavigationBarButtonTap:標題欄按鈕點擊')
        }
    }
</script>

打印結果如下:

應用生命周期onLaunch:應用初始化完成
應用生命周期onShow:應用啟動完成
頁面生命周期onLoad:頁面加載
頁面生命周期onShow:頁面顯示
頁面生命周期onReady:頁面初次渲染完成

切換到其他頁面,再切換回首頁。

應用生命周期onHide:應用進入到后臺狀態
頁面生命周期onHide:頁面隱藏
應用生命周期onShow:應用啟動完成
頁面生命周期onShow:頁面顯示

4.2 執行順序總結

應用生命周期函數要先于頁面生命周期函數執行。

4.2.1 應用生命周期執行順序

onLaunch > onShow > onHide,其他生命周期函數需要相應動作觸發才會執行。比如 onError 函數在應用出現錯誤才會被觸發。

4.2.2 頁面生命周期執行順序

onLoad > onShow > onReady > onHide,其他生命周期函數需要相應動作觸發才會執行。比如 onPullDownRefresh 函數在頁面下拉的時候才會被觸發。

5. 小結

本節課程我們主要學習了 uni-app 生命周期。本節課程的重點如下:

  • 生命周期概念的理解;
  • 各個生命周期函數的觸發機制以及語法;
  • 生命周期函數的執行順序。