我的uni-app刨坑——概念學(xué)習(xí)

一、uni-app的由來

提到小程序,大多數(shù)人第一反應(yīng)該都是聯(lián)想到微信。其實(shí) Dcloud 才是小程序行業(yè)的開創(chuàng)者。
DCloud,數(shù)字天堂(北京)網(wǎng)絡(luò)技術(shù)有限公司,是W3C 成員及 HTML5 中國(guó)產(chǎn)業(yè)聯(lián)盟發(fā)起單位。

2012年,DCloud 開始研發(fā)小程序技術(shù),優(yōu)化 webview 的功能和性能。
2015年,DCloud 正式商用了自己的小程序,產(chǎn)品名為“流應(yīng)用”,并且將技術(shù)標(biāo)準(zhǔn)貢獻(xiàn)給工信部旗下的HTML5中國(guó)產(chǎn)業(yè)聯(lián)盟,并推進(jìn)各家流量巨頭接入該標(biāo)準(zhǔn),開展小程序業(yè)務(wù)。360手機(jī)助手率先接入,緊隨其后的包括了大眾點(diǎn)評(píng)、攜程、京東、有道詞典等。
2015年9月,DCloud 推進(jìn)微信團(tuán)隊(duì)開展小程序,并在2016年出上線小程序業(yè)務(wù),但是微信并沒有接入聯(lián)盟的標(biāo)準(zhǔn),而是制定了自己的一套標(biāo)準(zhǔn)。
隨著 DCloud 持續(xù)普及小程序理念,越來越多的大流量巨頭公司紛紛開始加入其行列,但是接入聯(lián)盟標(biāo)準(zhǔn)的僅有部分公司,大部分會(huì)因?yàn)樯虡I(yè)利益而制定了私有標(biāo)準(zhǔn),從而造成標(biāo)準(zhǔn)無法統(tǒng)一,十分混亂。
面對(duì)這種混亂局面,DCloud 決定開發(fā)一個(gè)免費(fèi)開源的框架,通過這個(gè)框架為開發(fā)者抹平各大平臺(tái)的差異,這個(gè)框架就是 uni-app,這就是它的由來。

二、html、vue、小程序的區(qū)別

此處引用一下官網(wǎng)推薦的《白話uni-app》,特別適合像我這樣的新手閱讀。
文章中講述了許多編碼方式的變化以及 uni-app 中對(duì)比于 html 標(biāo)簽所改變及保留的一些標(biāo)簽內(nèi)容,除此之外還有寫出新增的針對(duì)于手機(jī)端常用的新組建,內(nèi)容干貨巨多,寫的十分詳細(xì)易懂。

三、框架簡(jiǎn)介

1、目錄結(jié)構(gòu)

┌─cloudfunctions        云函數(shù)目錄(阿里云為aliyun,騰訊云為tcb,詳見uniCloud)
│─components            符合vue組件規(guī)范的uni-app組件目錄
│  └─comp-a.vue         可復(fù)用的a組件
├─hybrid                存放本地網(wǎng)頁的目錄,詳見
├─platforms             存放各平臺(tái)專用頁面的目錄,詳見
├─pages                 業(yè)務(wù)頁面文件存放的目錄
│  ├─index
│  │  └─index.vue       index頁面
│  └─list
│     └─list.vue        list頁面
├─static                存放應(yīng)用引用靜態(tài)資源(如圖片、視頻等)的目錄,注意:靜態(tài)資源只能存放于此
├─wxcomponents          存放小程序組件的目錄,詳見
├─main.js               Vue初始化入口文件
├─App.vue               應(yīng)用配置,用來配置App全局樣式以及監(jiān)聽 應(yīng)用生命周期
├─manifest.json         配置應(yīng)用名稱、appid、logo、版本等打包信息,詳見
└─pages.json            配置頁面路由、導(dǎo)航條、選項(xiàng)卡等頁面類信息,詳見

Tips

  • static目錄為靜態(tài)資源存放文件夾,該目錄下的js文件不會(huì)被編譯,若文件中存放有二手代碼,不會(huì)經(jīng)>過轉(zhuǎn)換直接運(yùn)行,在手機(jī)設(shè)備上會(huì)報(bào)錯(cuò)
  • css、less/sass等資源也不要放在目錄下,這類公共資源建議放在common目錄下

2、資源路徑說明

  • 模板內(nèi)引入靜態(tài)資源
<!-- template內(nèi)引入靜態(tài)資源,如image、video等標(biāo)簽的src屬性時(shí),可以使用相對(duì)路徑或者絕對(duì)路徑 -->
<!-- 絕對(duì)路徑,/static指根目錄下的static目錄,在cli項(xiàng)目中/static指src目錄下的static目錄 -->
<image class="logo" src="/static/logo.png"></image>
<image class="logo" src="@/static/logo.png"></image>
<!-- 相對(duì)路徑 -->
<image class="logo" src="../../static/logo.png"></image>
  • js文件引入
// js文件或script標(biāo)簽內(nèi)(包括renderjs等)引入js文件時(shí),可以使用相對(duì)路徑和絕對(duì)路徑
// 絕對(duì)路徑,@指向項(xiàng)目根目錄,在cli項(xiàng)目中@指向src目錄
import add from '@/common/add.js'
// 相對(duì)路徑,js文件不支持使用/開頭的方式引入
import add from '../../common/add.js'   
  • css引入靜態(tài)資源
/* 絕對(duì)路徑 */
background-image: url(/static/logo.png);
background-image: url(@/static/logo.png);
/* 相對(duì)路徑 */
background-image: url(../../static/logo.png);

3、應(yīng)用的生命周期

  • onLaunch:當(dāng)uni-app初始化時(shí)完成,全局只完成一次。
  • 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頁面發(fā)送的數(shù)據(jù)進(jìn)行監(jiān)聽
  • onUnhandledRejection:對(duì)未處理的 Promise 拒絕事件監(jiān)聽函數(shù)
  • onPageNotFound:頁面不存在監(jiān)聽函數(shù)
  • onThemeChange:監(jiān)聽系統(tǒng)主題變化

4、頁面的生命周期

函數(shù)名 說明 平臺(tái)差異說明 最低版本
onLoad 監(jiān)聽頁面加載,其參數(shù)為上個(gè)頁面?zhèn)鬟f的數(shù)據(jù),參數(shù)類型為Object(用于頁面?zhèn)鲄ⅲ?,參?a target="_blank">示例
onShow 監(jiān)聽頁面顯示。頁面每次出現(xiàn)在屏幕上都觸發(fā),包括從下級(jí)頁面點(diǎn)返回露出當(dāng)前頁面
onReady 監(jiān)聽頁面初次渲染完成。注意如果渲染速度快,會(huì)在頁面進(jìn)入動(dòng)畫完成前觸發(fā)
onHide 監(jiān)聽頁面隱藏
onUnload 監(jiān)聽頁面卸載
onResize 監(jiān)聽窗口尺寸變化 App、微信小程序
onPullDownRefresh 監(jiān)聽用戶下拉動(dòng)作,一般用于下拉刷新,參考示例
onReachBottom 頁面上拉觸底事件的處理函數(shù)
onTabItemTap 點(diǎn)擊 tab 時(shí)觸發(fā),參數(shù)為Object,具體見下方注意事項(xiàng) 微信小程序、百度小程序、H5、App(自定義組件模式)
onShareAppMessage 用戶點(diǎn)擊右上角分享 微信小程序、百度小程序、字節(jié)跳動(dòng)小程序、支付寶小程序
onPageScroll 監(jiān)聽頁面滾動(dòng),參數(shù)為Object
onNavigationBarButtonTap 監(jiān)聽原生標(biāo)題欄按鈕點(diǎn)擊事件,參數(shù)為Object 5+ App、H5
onBackPress 監(jiān)聽頁面返回,返回 event = {from:backbutton、 navigateBack} ,backbutton 表示來源是左上角返回按鈕或 android 返回鍵;navigateBack表示來源是 uni.navigateBack ;詳細(xì)說明及使用:onBackPress 詳解 App、H5
onNavigationBarSearchInputChanged 監(jiān)聽原生標(biāo)題欄搜索輸入框輸入內(nèi)容變化事件 App、H5 1.6.0
onNavigationBarSearchInputConfirmed 監(jiān)聽原生標(biāo)題欄搜索輸入框搜索事件,用戶點(diǎn)擊軟鍵盤上的“搜索”按鈕時(shí)觸發(fā)。 App、H5 1.6.0
onNavigationBarSearchInputClicked 監(jiān)聽原生標(biāo)題欄搜索輸入框點(diǎn)擊事件 App、H5 1.6.0
onShareTimeline 監(jiān)聽用戶點(diǎn)擊右上角轉(zhuǎn)發(fā)到朋友圈 微信小程序 2.8.1+
onAddToFavorites 監(jiān)聽用戶點(diǎn)擊右上角收藏 微信小程序 2.8.1+

5、頁面棧

框架以棧的形式管理當(dāng)前所有頁面, 當(dāng)發(fā)生路由切換的時(shí)候,頁面棧的表現(xiàn)如下:

路由方式 頁面棧表現(xiàn) 觸發(fā)時(shí)機(jī)
初始化 新頁面入棧 uni-app 打開的第一個(gè)頁面
打開新頁面 新頁面入棧 調(diào)用 API uni.navigateTo 、使用組件<navigator open-type="navigate"/>
頁面重定向 當(dāng)前頁面出棧,新頁面入棧 調(diào)用 APIuni.redirectTo 、使用組件<navigator open-type="redirectTo"/>
頁面返回 頁面不斷出棧,直到目標(biāo)返回頁 調(diào)用 APIuni.navigateBack、使用組件<navigator open-type="navigateBack"/>、用戶按左上角返回按鈕、安卓用戶點(diǎn)擊物理back按鍵
Tab 切換 頁面全部出棧,只留下新的 Tab 頁面 調(diào)用 APIuni.switchTab 、使用組件<navigator open-type="switchTab"/>、用戶切換 Tab
重加載 頁面全部出棧,只留下新的頁面 調(diào)用 APIuni.reLaunch 、使用組件<navigator open-type="reLaunch"/>

6、官方文檔

page.json配置 的官方文檔

uni-app官方組件文檔

內(nèi)容很詳細(xì),可作為工具文檔使用


2020.10.30

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容