1啄寡、項(xiàng)目目錄結(jié)構(gòu)
一個(gè)uni-app工程怨规,默認(rèn)包含如下目錄及文件:
┌─uniCloud 云空間目錄俭茧,阿里云為uniCloud-aliyun,騰訊云為uniCloud-tcb(詳見(jiàn)uniCloud)
│─components 符合vue組件規(guī)范的uni-app組件目錄
│ └─comp-a.vue 可復(fù)用的a組件
├─hybrid App端存放本地html文件的目錄
├─platforms 存放各平臺(tái)專用頁(yè)面的目錄
├─pages 業(yè)務(wù)頁(yè)面文件存放的目錄
│ ├─index
│ │ └─index.vue index頁(yè)面
│ └─list
│ └─list.vue list頁(yè)面
├─static 存放應(yīng)用引用的本地靜態(tài)資源(如圖片、視頻等)的目錄,注意:靜態(tài)資源只能存放于此
├─uni_modules 存放[uni_module](/uni_modules)規(guī)范的插件篮昧。
├─wxcomponents 存放小程序組件的目錄
├─main.js Vue初始化入口文件
├─App.vue 應(yīng)用配置赋荆,用來(lái)配置App全局樣式以及監(jiān)聽(tīng) 應(yīng)用生命周期
├─manifest.json 配置應(yīng)用名稱、appid懊昨、logo窄潭、版本等打包信息
└─pages.json 配置頁(yè)面路由、導(dǎo)航條酵颁、選項(xiàng)卡等頁(yè)面類信息
2嫉你、應(yīng)用生命周期
uni-app
支持如下應(yīng)用生命周期函數(shù):
函數(shù)名 | 說(shuō)明 |
---|---|
onLaunch | 當(dāng)uni-app 初始化完成時(shí)觸發(fā)(全局只觸發(fā)一次) |
onShow | 當(dāng) uni-app 啟動(dòng),或從后臺(tái)進(jìn)入前臺(tái)顯示 |
onHide | 當(dāng) uni-app 從前臺(tái)進(jìn)入后臺(tái) |
onError | 當(dāng) uni-app 報(bào)錯(cuò)時(shí)觸發(fā) |
onUniNViewMessage | 對(duì) nvue 頁(yè)面發(fā)送的數(shù)據(jù)進(jìn)行監(jiān)聽(tīng)躏惋,可參考 nvue 向 vue 通訊
|
onUnhandledRejection | 對(duì)未處理的 Promise 拒絕事件監(jiān)聽(tīng)函數(shù)(2.8.1+) |
onPageNotFound | 頁(yè)面不存在監(jiān)聽(tīng)函數(shù) |
onThemeChange | 監(jiān)聽(tīng)系統(tǒng)主題變化 |
注意
- 應(yīng)用生命周期僅可在
App.vue
中監(jiān)聽(tīng)幽污,在其它頁(yè)面監(jiān)聽(tīng)無(wú)效。
3其掂、頁(yè)面生命周期
uni-app
支持如下頁(yè)面生命周期函數(shù):
函數(shù)名 | 說(shuō)明 | 平臺(tái)差異說(shuō)明 | 最低版本 |
---|---|---|---|
onInit | 監(jiān)聽(tīng)頁(yè)面初始化油挥,其參數(shù)同 onLoad 參數(shù),為上個(gè)頁(yè)面?zhèn)鬟f的數(shù)據(jù)款熬,參數(shù)類型為 Object(用于頁(yè)面?zhèn)鲄ⅲ|發(fā)時(shí)機(jī)早于 onLoad | 百度小程序 | 3.1.0+ |
onLoad | 監(jiān)聽(tīng)頁(yè)面加載攘乒,其參數(shù)為上個(gè)頁(yè)面?zhèn)鬟f的數(shù)據(jù)贤牛,參數(shù)類型為 Object(用于頁(yè)面?zhèn)鲄ⅲ瑓⒖?a target="_blank">示例 | ||
onShow | 監(jiān)聽(tīng)頁(yè)面顯示则酝。頁(yè)面每次出現(xiàn)在屏幕上都觸發(fā)殉簸,包括從下級(jí)頁(yè)面點(diǎn)返回露出當(dāng)前頁(yè)面 | ||
onReady | 監(jiān)聽(tīng)頁(yè)面初次渲染完成。注意如果渲染速度快沽讹,會(huì)在頁(yè)面進(jìn)入動(dòng)畫完成前觸發(fā) | ||
onHide | 監(jiān)聽(tīng)頁(yè)面隱藏 | ||
onUnload | 監(jiān)聽(tīng)頁(yè)面卸載 | ||
onResize | 監(jiān)聽(tīng)窗口尺寸變化 | App般卑、微信小程序 | |
onPullDownRefresh | 監(jiān)聽(tīng)用戶下拉動(dòng)作,一般用于下拉刷新爽雄,參考示例 | ||
onReachBottom | 頁(yè)面滾動(dòng)到底部的事件(不是scroll-view滾到底)蝠检,常用于下拉下一頁(yè)數(shù)據(jù)。具體見(jiàn)下方注意事項(xiàng) | ||
onTabItemTap | 點(diǎn)擊 tab 時(shí)觸發(fā)挚瘟,參數(shù)為Object叹谁,具體見(jiàn)下方注意事項(xiàng) | 微信小程序、支付寶小程序乘盖、百度小程序焰檩、H5、App(自定義組件模式) | |
onShareAppMessage | 用戶點(diǎn)擊右上角分享 | 微信小程序订框、百度小程序析苫、字節(jié)跳動(dòng)小程序、支付寶小程序 | |
onPageScroll | 監(jiān)聽(tīng)頁(yè)面滾動(dòng),參數(shù)為Object | nvue暫不支持 | |
onNavigationBarButtonTap | 監(jiān)聽(tīng)原生標(biāo)題欄按鈕點(diǎn)擊事件衩侥,參數(shù)為Object | App国旷、H5 | |
onBackPress | 監(jiān)聽(tīng)頁(yè)面返回,返回 event = {from:backbutton顿乒、 navigateBack} 议街,backbutton 表示來(lái)源是左上角返回按鈕或 android 返回鍵;navigateBack表示來(lái)源是 uni.navigateBack 璧榄;詳細(xì)說(shuō)明及使用:onBackPress 詳解特漩。支付寶小程序只有真機(jī)能觸發(fā),只能監(jiān)聽(tīng)非navigateBack引起的返回骨杂,不可阻止默認(rèn)行為涂身。 | app、H5搓蚪、支付寶小程序 | |
onNavigationBarSearchInputChanged | 監(jiān)聽(tīng)原生標(biāo)題欄搜索輸入框輸入內(nèi)容變化事件 | App蛤售、H5 | 1.6.0 |
onNavigationBarSearchInputConfirmed | 監(jiān)聽(tīng)原生標(biāo)題欄搜索輸入框搜索事件,用戶點(diǎn)擊軟鍵盤上的“搜索”按鈕時(shí)觸發(fā)妒潭。 | App悴能、H5 | 1.6.0 |
onNavigationBarSearchInputClicked | 監(jiān)聽(tīng)原生標(biāo)題欄搜索輸入框點(diǎn)擊事件 | App、H5 | 1.6.0 |
onShareTimeline | 監(jiān)聽(tīng)用戶點(diǎn)擊右上角轉(zhuǎn)發(fā)到朋友圈 | 微信小程序 | 2.8.1+ |
onAddToFavorites | 監(jiān)聽(tīng)用戶點(diǎn)擊右上角收藏 | 微信小程序 | 2.8.1+ |
4雳灾、組件生命周期
自定義組件時(shí)漠酿,組件的生命周期
函數(shù)名 | 說(shuō)明 |
---|---|
beforeCreate | 組件初始化,但數(shù)據(jù)原生觀測(cè)谎亩、自定義觀測(cè)(event\watcher)沒(méi)生成之前炒嘲。 未完全創(chuàng)建階段 |
created | 組件創(chuàng)建后,但還未掛載 完全創(chuàng)建階段 |
beforeMount | 組件渲染后匈庭,掛載前夫凸。 渲染后待掛載 |
mounted | 組件掛載到頁(yè)面 可用 vm.$el 訪問(wèn) 掛載OK |
beforeUpdate | 虛擬 DOM 重新渲染和打補(bǔ)丁之前 再次渲染前 |
updated | 組件 DOM 已經(jīng)更新 再次渲染后 |
activated | keep-alive 組件激活時(shí)調(diào)用。 當(dāng)前組件被激活:顯示 |
deactivated | keep-alive 組件停用時(shí)調(diào)用阱持。 當(dāng)前組件隱藏 |
beforeDestroy | 實(shí)例銷毀之前調(diào)用夭拌。實(shí)例仍然完全可用。 銷毀前 |
destroy | Vue 實(shí)例銷毀后調(diào)用 |
注:掛載階段紊选,先渲染組件啼止,然后掛載組件。
想要在拿到在props中定義的屬性值時(shí)做一些操作兵罢,可以在
mounted
回調(diào)中處理
5献烦、開(kāi)發(fā)環(huán)境和生產(chǎn)環(huán)境的判斷
HBuilderX 中敲入代碼塊 uEnvDev
、uEnvProd
可以快速生成對(duì)應(yīng) development
卖词、production
的運(yùn)行環(huán)境判定代碼巩那。
// uEnvDev
if (process.env.NODE_ENV === 'development') {
// TODO 開(kāi)發(fā)環(huán)境
}
// uEnvProd
if (process.env.NODE_ENV === 'production') {
// TODO 生產(chǎn)環(huán)境
}
6吏夯、運(yùn)行平臺(tái)判斷
運(yùn)行期判斷 運(yùn)行期判斷是指代碼已經(jīng)打入包中,仍然需要在運(yùn)行期判斷平臺(tái)即横,此時(shí)可使用 uni.getSystemInfoSync().platform
判斷客戶端環(huán)境是 Android噪生、iOS 還是小程序開(kāi)發(fā)工具(在百度小程序開(kāi)發(fā)工具、微信小程序開(kāi)發(fā)工具东囚、支付寶小程序開(kāi)發(fā)工具中使用 uni.getSystemInfoSync().platform
返回值均為 devtools)跺嗽。
switch(uni.getSystemInfoSync().platform){
case 'android':
console.log('運(yùn)行Android上')
break;
case 'ios':
console.log('運(yùn)行iOS上')
break;
default:
console.log('運(yùn)行在開(kāi)發(fā)者工具上')
break;
}
7、條件編譯
寫法:以 #ifdef 或 #ifndef 加 %PLATFORM% 開(kāi)頭页藻,以 #endif 結(jié)尾桨嫁。
- #ifdef:if defined 僅在某平臺(tái)存在
- #ifndef:if not defined 除了某平臺(tái)均存在
- %PLATFORM%:平臺(tái)名稱
條件編譯寫法 | 說(shuō)明 |
---|---|
#ifdef APP-PLUS 需條件編譯的代碼 #endif | 僅出現(xiàn)在 App 平臺(tái)下的代碼 |
#ifndef H5 需條件編譯的代碼 #endif | 除了 H5 平臺(tái),其它平臺(tái)均存在的代碼 |
#ifdef H5 || MP-WEIXIN 需條件編譯的代碼 #endif | 在 H5 平臺(tái)或微信小程序平臺(tái)存在的代碼(這里只有||份帐,不可能出現(xiàn)&&璃吧,因?yàn)闆](méi)有交集) |
%PLATFORM% 可取值如下:
值 | 平臺(tái) |
---|---|
APP-PLUS | App |
APP-PLUS-NVUE或APP-NVUE | App nvue |
H5 | H5 |
MP-WEIXIN | 微信小程序 |
MP-ALIPAY | 支付寶小程序 |
MP-BAIDU | 百度小程序 |
MP-TOUTIAO | 字節(jié)跳動(dòng)小程序 |
MP-QQ | QQ小程序 |
MP-360 | 360小程序 |
MP | 微信小程序/支付寶小程序/百度小程序/字節(jié)跳動(dòng)小程序/QQ小程序/360小程序 |
QUICKAPP-WEBVIEW | 快應(yīng)用通用(包含聯(lián)盟、華為) |
QUICKAPP-WEBVIEW-UNION | 快應(yīng)用聯(lián)盟 |
QUICKAPP-WEBVIEW-HUAWEI | 快應(yīng)用華為 |
支持的文件
- .vue
- .js
- .css
- pages.json
- 各預(yù)編譯語(yǔ)言文件废境,如:.scss畜挨、.less、.stylus噩凹、.ts巴元、.pug
注意:
- 條件編譯是利用注釋實(shí)現(xiàn)的,在不同語(yǔ)法里注釋寫法不一樣驮宴,js使用
// 注釋
务冕、css 使用/* 注釋 */
、vue/nvue 模板里使用<幻赚!-- 注釋 -->
; - 條件編譯APP-PLUS包含APP-NVUE和APP-VUE臊旭,APP-PLUS-NVUE和APP-NVUE沒(méi)什么區(qū)別落恼,為了簡(jiǎn)寫后面出了APP-NVUE ;
- 使用條件編譯請(qǐng)保證
編譯前
和編譯后
文件的正確性离熏,比如json文件中不能有多余的逗號(hào)佳谦;