1. 程式人生 > 實用技巧 >uniapp 學集 (第三章)生命週期、API

uniapp 學集 (第三章)生命週期、API

寫在前面:分享技術,共同進步,有不足請見諒,相關意見可評論告知 ~

有道無術,術尚可求;
有術無道,終止於術!

多端執行,架式簡化;
程式設計路漫,學無止盡!

目錄

條件編譯

官方文件參考
可以使用 process.env.NODE_ENV 來獲取執行環境
執行編譯---> 開發環境
發行編譯--->生產環境

development 是開發環境
production 是生產環境

#ifdef :只在某平臺出現
#ifndef :  除了某平臺以外都出現
#endif : 結尾識別符號

生命週期

官方文件參考
往期參考

跳轉連結

應用生命週期

應用生命週期是針對一整個應用去觸發的,如應用啟動、初始化、報錯等。

應用生命週期只能在 App.vue 中監聽,其他頁面無法監聽

函式名 說明
onLaunch uni-app 初始化完成時觸發(全域性只觸發一次)
onShow uni-app 啟動,或從後臺進入前臺顯示
onHide uni-app 從前臺進入後臺
onError uni-app 報錯時觸發
onUniNViewMessage nvue 頁面傳送的資料進行監聽,可參考 nvue 向 vue 通訊
onUnhandledRejection 對未處理的 Promise 拒絕事件監聽函式(2.8.1+)
onPageNotFound 頁面不存在監聽函式
onThemeChange 監聽系統主題變化

程式碼演示

<script>
	export default {
		onLaunch() {
			console.log("app初始化完成")
		},
		onShow() {
			console.log("app啟動")
		},
		onHide() {
			console.log("App進入後臺")
		}
	}
</script>

<style>
	/*每個頁面公共css */
</style>

頁面生命週期

頁面生命週期就類似於Vue中的生命週期,在每個頁面載入、進入、渲染、銷燬等場景觸發

函式名 說明 平臺差異說明 最低版本
onLoad 監聽頁面載入,其引數為上個頁面傳遞的資料,引數型別為Object(用於頁面傳參),參考示例
onShow 監聽頁面顯示。頁面每次出現在螢幕上都觸發,包括從下級頁面點返回露出當前頁面
onReady 監聽頁面初次渲染完成。注意如果渲染速度快,會在頁面進入動畫完成前觸發
onHide 監聽頁面隱藏
onUnload 監聽頁面解除安裝
onResize 監聽視窗尺寸變化 App、微信小程式
onPullDownRefresh 監聽使用者下拉動作,一般用於下拉重新整理,參考示例
onReachBottom 頁面上拉觸底事件的處理函式
onTabItemTap 點選 tab 時觸發,引數為Object,具體見下方注意事項 微信小程式、百度小程式、H5、App(自定義元件模式)
onShareAppMessage 使用者點選右上角分享 微信小程式、百度小程式、位元組跳動小程式、支付寶小程式
onPageScroll 監聽頁面滾動,引數為Object
onNavigationBarButtonTap 監聽原生標題欄按鈕點選事件,引數為Object 5+ App、H5
onBackPress 監聽頁面返回,返回 event = {from:backbutton、 navigateBack} ,backbutton 表示來源是左上角返回按鈕或 android 返回鍵;navigateBack表示來源是 uni.navigateBack ;詳細說明及使用:onBackPress 詳解 App、H5
onNavigationBarSearchInputChanged 監聽原生標題欄搜尋輸入框輸入內容變化事件 App、H5 1.6.0
onNavigationBarSearchInputConfirmed 監聽原生標題欄搜尋輸入框搜尋事件,使用者點選軟鍵盤上的“搜尋”按鈕時觸發。 App、H5 1.6.0
onNavigationBarSearchInputClicked 監聽原生標題欄搜尋輸入框點選事件 App、H5 1.6.0
onShareTimeline 監聽使用者點選右上角轉發到朋友圈 微信小程式 2.8.1+
onAddToFavorites 監聽使用者點選右上角收藏 微信小程式 2.8.1+

onPageScroll 引數說明:

屬性 型別 說明
scrollTop Number 頁面在垂直方向已滾動的距離(單位px)

onTabItemTap 引數說明:

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

onNavigationBarButtonTap 引數說明:

屬性 型別 說明
index Number 原生標題欄按鈕陣列的下標

onBackPress 回撥引數物件說明:

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

程式碼演示

<template>
	<view>
		<view v-for="item in arr">
			{{item}}
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				arr: [
				// 模擬下拉情況
					1,2,3,4,5,6,7,12312,5413,423,213,14,235,23,412,312,3125,8,9,10,11,12,12,131,41,123,412,412,321,5123,41,12,312,154,3,4312,32
				]
			}
		},
		onLoad(e) {
			console.log("頁面載入", e)
		},
		onShow() {
			console.log("頁面顯示")
		},
		onPullDownRefresh() {
			this.arr = [
					1,2,3,4,5,6,7,12312,5413,423,213,14,235,23,412,312,3125,8,9,10,11,12,12,131,41,123,412,412,321,5123,41,12,312,154,3,4312,32
				]
			console.log("下拉重新整理")
			setTimeout(()=>{
				uni.stopPullDownRefresh()
			}, 2000)
		},
		onReachBottom() {
			this.arr.push(...[
				1,2,34,4,5,6
			])
			console.log("觸底載入")
		},
		onShareAppMessage() {
			console.log("點選了分享")
		},
		methods: {
			
		}
	}
</script>

<style>

</style>

API

官方文件參考

網路請求

發起請求


檔案下載

檔案上傳與下載對比學習

OBJECT 引數說明

引數名 型別 必填 說明
url String 下載資源的 url
header Object HTTP 請求 Header, header 中不能設定 Referer。
success Function 下載成功後以 tempFilePath 的形式傳給頁面,res = {tempFilePath: '檔案的臨時路徑'}
fail Function 介面呼叫失敗的回撥函式
complete Function 介面呼叫結束的回撥函式(呼叫成功、失敗都會執行)

注:檔案的臨時路徑,在應用本次啟動期間可以正常使用,如需持久儲存,需在主動呼叫 uni.saveFile,才能在應用下次啟動時訪問得到。

success 返回引數說明

引數 型別 說明
tempFilePath String 臨時檔案路徑,下載後的檔案會儲存到一個臨時檔案
statusCode Number 開發者伺服器返回的 HTTP 狀態碼

監聽的用法


程式碼演示

<template>
	<view>
		<button type="default" @click="getData()">點我傳送請求</button>
		<button type="default" @click="download()">點我下載</button>
		 <progress :percent="percent" show-info />
	</view>
</template>

<script>
	export default {
		data() {
			return {
				percent: 0
			}
		},
		methods: {
			getData() {
				uni.request({
					url:"http://47.102.115.146:8080/department/departmentList",
					method:"GET",
					success(e) {
						console.log("請求成功", e)
					},
					fail(e) {
						console.log("請求失敗", e)
					}
				})
			},
			download() {
				const task = uni.downloadFile({
					url:"https://ydsmarkdown.oss-cn-beijing.aliyuncs.com/audio/%E6%99%AF%E5%B2%97%E5%B1%B1%20-%20%E5%AE%88%E4%B8%9A%E6%9B%B4%E6%AF%94%E5%88%9B%E4%B8%9A%E9%9A%BE.mp3",
					success(e) {
						console.log("下載成功!", e)
					},
					fail(e) {
						console.log("下載失敗!", e)
					}
				})
				task.onProgressUpdate((e) => {
					this.percent = e.progress
				})
			}
		}
	}
</script>

<style>

</style>

檔案下載同樣可以監聽,用法和上傳一樣。

路由跳轉

官方文件參考

重點: navigateTo ,redirectTo, reLaunch

視窗動畫

本API僅App支援

視窗的顯示/關閉動畫效果,支援在 API、元件、pages.json 中配置,優先順序為:API = 元件 > pages.json

API

有效的路由 API

  • navigateTo
  • navigateBack
uni.navigateTo({
    url: '../test/test',
    animationType: 'pop-in',
    animationDuration: 200
});
uni.navigateBack({
    delta: 1,
    animationType: 'pop-out',
    animationDuration: 200
});

元件

open-type 有效值

  • navigateTo
  • navigateBack
<navigator animation-type="pop-in" animation-duration="300" url="../test/test">navigator</navigator>
<navigator animation-type="pop-out" animation-duration="300" open-type="navigateBack" >navigator</navigator>

pages.json

pages.json 中配置的是視窗顯示的動畫

"style": {
    "app-plus": {
        "animationType": "fade-in",
        "animationDuration": 300
    }
}

顯示動畫與關閉動畫,會有預設的對應規則。但是如果通過 API 或元件配置了視窗關閉的動畫型別,則不會使用預設的型別。

顯示動畫 關閉動畫 顯示動畫描述(關閉動畫與之相反)
slide-in-right slide-out-right 新窗體從右側進入
slide-in-left slide-out-left 新窗體從左側進入
slide-in-top slide-out-top 新窗體從頂部進入
slide-in-bottom slide-out-bottom 新窗體從底部進入
pop-in pop-out 新窗體從左側進入,且老窗體被擠壓而出
fade-in fade-out 新窗體從透明到不透明逐漸顯示
zoom-out zoom-in 新窗體從小到大縮放顯示
zoom-fade-out zoom-fade-in 新窗體從小到大逐漸放大並且從透明到不透明逐漸顯示
none none 無動畫