uniapp 學集 (第三章)生命週期、API
阿新 • • 發佈:2020-10-04
寫在前面:分享技術,共同進步,有不足請見諒,相關意見可評論告知 ~
目錄有道無術,術尚可求;
有術無道,終止於術!多端執行,架式簡化;
程式設計路漫,學無止盡!
條件編譯
官方文件參考
可以使用 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 | 無動畫 |