uni-app初覽

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 中敲入代碼塊 uEnvDevuEnvProd 可以快速生成對(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)佳谦;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市滋戳,隨后出現(xiàn)的幾起案子钻蔑,更是在濱河造成了極大的恐慌,老刑警劉巖奸鸯,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咪笑,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡娄涩,警方通過(guò)查閱死者的電腦和手機(jī)窗怒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人扬虚,你說(shuō)我怎么就攤上這事努隙。” “怎么了辜昵?”我有些...
    開(kāi)封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵荸镊,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我堪置,道長(zhǎng)躬存,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任晋柱,我火速辦了婚禮优构,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘雁竞。我一直安慰自己钦椭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布碑诉。 她就那樣靜靜地躺著彪腔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪进栽。 梳的紋絲不亂的頭發(fā)上德挣,一...
    開(kāi)封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音快毛,去河邊找鬼格嗅。 笑死,一個(gè)胖子當(dāng)著我的面吹牛唠帝,可吹牛的內(nèi)容都是我干的屯掖。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼襟衰,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼贴铜!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起瀑晒,我...
    開(kāi)封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤绍坝,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后苔悦,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體轩褐,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年间坐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了灾挨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片邑退。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖劳澄,靈堂內(nèi)的尸體忽然破棺而出地技,到底是詐尸還是另有隱情,我是刑警寧澤秒拔,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布莫矗,位于F島的核電站,受9級(jí)特大地震影響砂缩,放射性物質(zhì)發(fā)生泄漏作谚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一庵芭、第九天 我趴在偏房一處隱蔽的房頂上張望妹懒。 院中可真熱鬧,春花似錦双吆、人聲如沸眨唬。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)匾竿。三九已至,卻和暖如春蔚万,著一層夾襖步出監(jiān)牢的瞬間岭妖,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工反璃, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留昵慌,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓淮蜈,卻偏偏與公主長(zhǎng)得像废离,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子礁芦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355