知識
不管是網站,軟件還是小程序,都要直接或間接能為您產生價值,我們在追求其視覺表現(xiàn)的同時,更側重于功能的便捷,營銷的便利,運營的高效,讓網站成為營銷工具,讓軟件能切實提升企業(yè)內部管理水平和效率。優(yōu)秀的程序為后期升級提供便捷的支持!
uni-app 開發(fā)技巧和注意事項
發(fā)表時間:2021-1-5
發(fā)布人:葵宇科技
瀏覽次數(shù):116
獲取路徑傳參,類似小程序,在onLoad接受參數(shù)。沒有vue中的query和param
// 路徑 /pages/index/index?a=1&b=2 onLoad(config) { const { a, b } = config } 復制代碼
uni-app內置vuex,但不支持vue-router
easycom(自動引入組件且是按需引入)
從插件市場安裝的組件默認是easycom,自定義組件可用正則匹配
"easycom": { "^u-(.*)": "@/uview-ui/components/u-$1/u-$1.vue", "comp": "@/pages/index/comp" } 復制代碼
生命周期(以下為全端支持),原則上應當頁面使用頁面的生命周期,組件用組件的生命周期,不能混用
應用生命周期,僅能在App.vue中監(jiān)聽
函數(shù)名 說明 onLaunch 當uni-app 初始化完成時觸發(fā)(全局只觸發(fā)一次) onShow 當 uni-app 啟動,或從后臺進入前臺顯示 onHide 當 uni-app 從前臺進入后臺 onUniNViewMessage 對 nvue 頁面發(fā)送的數(shù)據進行監(jiān)聽,可參考 nvue 向 vue 通訊 頁面生命周期
函數(shù)名 說明 onLoad 監(jiān)聽頁面加載,其參數(shù)為上個頁面?zhèn)鬟f的數(shù)據,參數(shù)類型為Object(用于頁面?zhèn)鲄ⅲ?/td> onShow 監(jiān)聽頁面顯示。頁面每次出現(xiàn)在屏幕上都觸發(fā),包括從下級頁面點返回露出當前頁面 onReady 監(jiān)聽頁面初次渲染完成。注意如果渲染速度快,會在頁面進入動畫完成前觸發(fā) onHide 監(jiān)聽頁面隱藏 onUnload 監(jiān)聽頁面卸載 onPullDownRefresh 監(jiān)聽用戶下拉動作,一般用于下拉刷新 onReachBottom 頁面滾動到底部的事件(不是scroll-view滾到底),常用于上拉加載下一頁數(shù)據。如使用scroll-view導致頁面級沒有滾動,則觸底事件不會被觸發(fā) onPageScroll 監(jiān)聽頁面滾動,參數(shù)為Object vue組件生命周期
頁面也有組件的生命周期,但是組件沒有頁面的生命周期
頁面生命周期中,onload不能直接訪問dom,onready可以
// 在一個頁面中同時有頁面生命周期和組件生命周期
created() {
console.log('create')
},
onLoad() {
console.log('load')
},
beforeMount() {
console.log('beforemount')
},
beforeCreate() {
console.log('beforecreate')
},
onReady() {
console.log('ready')
},
mounted(){
console.log('mounted')
},
// h5、app中順序
// beforecreate -> load -> create -> beforemount -> ready -> mounted
// 微信和支付寶小程序中順序
// beforecreate -> create -> beforemount -> load -> mounted ->ready
復制代碼
// 頁面 onLoad() { console.log('load') }, onReady() { console.log('ready') } // 組件 beforeCreate() { console.log('comp-before-create') }, beforeMount() { console.log('comp-before-mount') }, created() { console.log('comp-create') }, mounted() { console.log('comp-mounted') }
復制代碼// h5、支付寶小程序、app中順序 // load -> comp-before-create -> comp-create -> comp-before-mount -> comp-mounted -> ready // 微信小程序中順序 // comp-before-create -> comp-create -> comp-before-mount -> load -> comp-mounted -> ready 復制代碼
條件編譯
// #ifdef H5 || MP-WEIXIN h5和微信小程序平臺特有 // #endif // #ifndef APP-PLUS || MP-ALIPAY app和支付寶小程序之外的平臺特有 // #endif 復制代碼
不同文件使用不同注釋方式,js使用
// 注釋
,css使用/* 注釋 */
,vue模板使用靜態(tài)資源static目錄下也可使用條件編譯,只要目錄名為對應平臺名就可以實現(xiàn)條件編譯
條件編譯不區(qū)分安卓和ios,使用
uni.getSystemInfo
區(qū)分二者socped
h5默認開啟scoped,其它平臺未開啟
v-html
小程序不支持v-html
組件命名
建議加上前綴防止沖突(不能是u和uni,微信小程序不能使用wx)
組件樣式
如果直接在父組件在子組件上使用class且class不是子組件的prop,在支付寶小程序處無效。父組件為子組件添加樣式時,需要外面使用一個原生的組件比如
view
對原生的組件,例如view、text設置ref,在小程序中為undefined,h5、app正常。封裝的組件能正常使用。
使用
position:fixed;
且bottom:0;
或top:0;
時,h5端表現(xiàn)為fixed元素與標題欄或導航欄重疊。原因為在h5端標題和導航都是一個組件,可用窗口大小包括二者??墒褂?code style="font-size: 14px; word-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: #1e6bb8; background-color: rgba(27,31,35,.05); font-family: Operator Mono, Consolas, Monaco, Menlo, monospace; word-break: break-all;">uni.getSystemInfo獲取系統(tǒng)信息,在h5和app中會有windowTop
和windowBottom
兩個參數(shù)表示可用窗口頂部和底部位置。使用條件編譯動態(tài)的設置top和bottom的值。promise
框架進行promise封裝的部分api(例如uni.request),回調參數(shù)是一個數(shù)組,第一項為錯誤信息,第二項是返回的數(shù)據。
css如果使用本地圖片路徑和本地字體路徑,需要使用
~@
開頭的絕對路徑~@/static/imgs/a.png
。40k以下的本地圖片或字體會被轉換成base64,超過的需要使用網絡資源。
uview-ui
小程序中u-input和u-field使用v-model后不支持vue的修飾符(trim,number,lazy),其中trim會報錯
“Property or method "$$v" is not defined on the instance but referenced during render”
。組件提供trim屬性。支付寶小程序使用u-cell-item組件且未使用label屬性時,會報錯
“TypeError: Cannot read property 'label' of undefined”
。在u-cell-item源碼28行處理。