如何高效的閱讀uni-app框架?(建議收藏)

image

uni-app的框架背镇,配置:page.json咬展,manifest.json泽裳,package.json,vue.config.js破婆。腳本涮总,應(yīng)用程序,main.js荠割。日志打印妹卿,定時器,生命周期蔑鹦,頁面夺克,頁面通訊。

pages.json文件時用來對uni-app進行全局配置的嚎朽,它是用來寫頁面文件的路徑铺纽,窗口樣式,底部的tabbar等哟忍,類似于小程序中的app.json的頁面管理狡门。這里注意的是定位,在小程序中是在app.json的锅很,而在uni-app中式在manifest配置的其馏,這一點是我做地圖時注意到的內(nèi)容。

image

pages.json:

{
    "pages": [{
        "path": "pages/component/index",
        "style": {
            "navigationBarTitleText": "組件"
        }
    }, {
        "path": "pages/API/index",
        "style": {
            "navigationBarTitleText": "接口"
        }
    }, {
        "path": "pages/component/view/index",
        "style": {
            "navigationBarTitleText": "view"
        }
    }],
    "condition": { //模式配置爆安,僅開發(fā)期間生效
        "current": 0, //當(dāng)前激活的模式(list 的索引項)
        "list": [{
            "name": "test", //模式名稱
            "path": "pages/component/view/index" //啟動頁面叛复,必選
        }]
    },
    "globalStyle": {
        "navigationBarTextStyle": "black",
        "navigationBarTitleText": "演示",
        "navigationBarBackgroundColor": "#F8F8F8",
        "backgroundColor": "#F8F8F8",
        "usingComponents":{
            "collapse-tree-item":"/components/collapse-tree-item"
        }
    },
    "tabBar": {
        "color": "#7A7E83",
        "selectedColor": "#3cc51f",
        "borderStyle": "black",
        "backgroundColor": "#ffffff",
        "height": "50px",
        "fontSize": "10px",
        "iconWidth": "24px",
        "spacing": "3px",
        "blurEffect": "none|extralight|light|dark", // 模糊效果,使用模糊效果時不要設(shè)置背景顏色扔仓,否則模糊效果會失效褐奥,默認值為none(僅iOS平臺支持 HBuilderX 2.4.3+)
        "list": [{
            "pagePath": "pages/component/index",
            "iconPath": "static/image/icon_component.png",
            "selectedIconPath": "static/image/icon_component_HL.png",
            "text": "組件"
        }, {
            "pagePath": "pages/API/index",
            "iconPath": "static/image/icon_API.png",
            "selectedIconPath": "static/image/icon_API_HL.png",
            "text": "接口"
        }],
        "midButton": {
            "width": "80px",
            "height": "50px",
            "text": "文字",
            "iconPath": "static/image/midButton_iconPath.png",
            "iconWidth": "24px",
            "backgroundImage": "static/image/midButton_backgroundImage.png"
        }
    }
}

globalStyle,設(shè)置應(yīng)用的狀態(tài)欄翘簇,導(dǎo)航條撬码,標題,窗口背景顏色等版保。

pages呜笑,配置頁面路徑。第一項為應(yīng)用入口彻犁,增加或是減少頁面蹈垢,都在pages數(shù)組中進行修改即可。

┌─pages               
│  ├─index
│  │  └─index.vue    
│  └─login
│     └─login.vue    
├─static             
├─main.js       
├─App.vue          
├─manifest.json  
└─pages.json
{
    "pages": [
        {
            "path": "pages/index/index", 
            "style": { ... }
        }, {
            "path": "pages/login/login", 
            "style": { ... }
        }
    ]
}

page頁面

{
  "pages": [{
      "path": "pages/index/index",
      "style": {
        "navigationBarTitleText": "首頁",//設(shè)置頁面標題文字
        "enablePullDownRefresh":true//開啟下拉刷新
      }
    },
    ...
  ]
}

常見titleNView配置代碼示例

{
    "pages": [{
            "path": "pages/index/index", //首頁
            "style": {
                "app-plus": {
                    "titleNView": false //禁用原生導(dǎo)航欄
                }
            }
        }, {
            "path": "pages/log/log", //日志頁面
            "style": {
                "app-plus": {
                    "bounce": "none", //關(guān)閉窗口回彈效果
                    "titleNView": {
                        "buttons": [ //原生標題欄按鈕配置,
                            {
                                "text": "分享" //原生標題欄增加分享按鈕袖裕,點擊事件可通過頁面的 onNavigationBarButtonTap 函數(shù)進行監(jiān)聽
                            }
                        ]
                    }
                }
            }
        }, {
            "path": "pages/detail/detail", //詳情頁面
            "style": {
                "navigationBarTitleText": "詳情",
                "app-plus": {
                    "titleNView": {
                        "type": "transparent"http://透明漸變導(dǎo)航欄
                    }
                }
            }
        }, {
            "path": "pages/search/search", //搜索頁面
            "style": {
                "app-plus": {
                    "titleNView": {
                        "type": "transparent",//透明漸變導(dǎo)航欄
                        "searchInput": {
                            "backgroundColor": "#fff",
                            "borderRadius": "6px", //輸入框圓角
                            "placeholder": "請輸入搜索內(nèi)容",
                            "disabled": true //disable時點擊輸入框不置焦,可以跳到新頁面搜索
                        }
                    }
                }
            }
        }
        ...
    ]
}

app-plus溉瓶,h5急鳄,mp-alipay

{
    "pages": [{
        "path": "pages/index/index", //首頁
        "style": {
            "app-plus": {
                "titleNView": false , //禁用原生導(dǎo)航欄
                "subNVues":[{//側(cè)滑菜單
                    "id": "drawer", //subNVue 的 id谤民,可通過 uni.getSubNVueById('drawer') 獲取
                    "path": "pages/index/drawer.nvue", // nvue 路徑
                    "style": { //webview style 子集,文檔可暫時開放出來位置疾宏,大小相關(guān)配置
                        "position": "popup", //除 popup 外张足,其他值域參考 5+ webview position 文檔
                        "width": "50%"
                    }

                }, {//彈出層
                    "id": "popup",
                    "path": "pages/index/popup",
                    "style": {
                        "position": "popup",
                        "margin":"auto",
                        "width": "150px",
                        "height": "150px"
                    }

                }, {//自定義頭
                    "id": "nav",
                    "path": "pages/index/nav",
                    "style": {
                        "position": "dock",
                        "height": "44px"
                    }

                }]
            }
        }
    }]
}

h5:

titleNView,導(dǎo)航欄

pullToRefresh,下拉刷新

tabBar,通過tabBar配置項指定tab欄的表現(xiàn)坎藐,以及tab切換時顯示的對應(yīng)項为牍。

當(dāng)設(shè)置position為top時,將不會顯示icon岩馍,tabBar中的list時一個數(shù)組碉咆,最少配置2個,最多配置5個蛀恩。

tabbar切換第一次加載時可能渲染不及時疫铜,可以在每個tabbar頁面的onLoad生命周期里先彈出一個等待的雪花。當(dāng)展示過一次tabbar頁面的時候双谆,再次切換tabbar頁面的時候壳咕,就只會觸發(fā)onShow這個方法,不會觸發(fā)onLoad了顽馋。

"tabBar": {
    "color": "#7A7E83",
    "selectedColor": "#3cc51f",
    "borderStyle": "black",
    "backgroundColor": "#ffffff",
    "list": [{
        "pagePath": "pages/component/index",
        "iconPath": "static/image/icon_component.png",
        "selectedIconPath": "static/image/icon_component_HL.png",
        "text": "組件"
    }, {
        "pagePath": "pages/API/index",
        "iconPath": "static/image/icon_API.png",
        "selectedIconPath": "static/image/icon_API_HL.png",
        "text": "接口"
    }]
}

condition啟動模式配置谓厘,開發(fā)期間有效。屬性:current僅僅在當(dāng)前激活的模式有效寸谜,list節(jié)點的索引值竟稳,list啟動模式列表。

"condition": { //模式配置程帕,僅開發(fā)期間生效
    "current": 0, //當(dāng)前激活的模式(list 的索引項)
    "list": [{
            "name": "swiper", //模式名稱
            "path": "pages/component/swiper/swiper", //啟動頁面住练,必選
            "query": "interval=4000&autoplay=false" //啟動參數(shù),在頁面的onLoad函數(shù)里面得到愁拭。
        },
        {
            "name": "test",
            "path": "pages/component/switch/switch"
        }
    ]
}

subPackages分包加載配置讲逛,但在5+app中為整包。subPackages節(jié)點接收一個數(shù)組岭埠,每個項都是應(yīng)用的子包盏混。

┌─pages               
│  ├─index
│  │  └─index.vue    
│  └─login
│     └─login.vue    
├─pagesA   
│  └─list
│     └─list.vue 
├─pagesB    
│  └─detail
│     └─detail.vue  
├─static             
├─main.js       
├─App.vue          
├─manifest.json  
└─pages.json         
{
    "pages": [{
        "path": "pages/index/index",
        "style": { ...}
    }, {
        "path": "pages/login/login",
        "style": { ...}
    }],
    "subPackages": [{
        "root": "pagesA",
        "pages": [{
            "path": "list/list",
            "style": { ...}
        }]
    }, {
        "root": "pagesB",
        "pages": [{
            "path": "detail/detail",
            "style": { ...}
        }]
    }],
    "preloadRule": {
        "pagesA/list/list": {
            "network": "all",
            "packages": ["__APP__"]
        },
        "pagesB/detail/detail": {
            "network": "all",
            "packages": ["pagesA"]
        }
    }
}

preloadRule 分包預(yù)載配置,key頁面的路徑惜论,value是進入頁面的預(yù)下載配置许赃。

manifest.json 文件時應(yīng)用的配置文件,應(yīng)用的名稱馆类,圖標混聊,權(quán)限等等。

networkTimeout 各類網(wǎng)絡(luò)請求的超時時間乾巧。

package.json 文件為uni-app的擴展節(jié)點句喜,可以實現(xiàn)自定義的編譯平臺预愤。

{
    /**
     package.json其它原有配置 
     */
    "uni-app": {// 擴展配置
        "scripts": {
            "custom-platform": { //自定義編譯平臺配置,可通過cli方式調(diào)用
                "title":"自定義擴展名稱", // 在HBuilderX中會顯示在 運行/發(fā)行 菜單中
                "BROWSER":"",  //運行到的目標瀏覽器咳胃,僅當(dāng)UNI_PLATFORM為h5時有效
                "env": {//環(huán)境變量
                    "UNI_PLATFORM": ""  //基準平臺 
                 },
                "define": { //自定義條件編譯
                    "CUSTOM-CONST": true //自定義條件編譯常量植康,建議為大寫
                }
            }
        }    
    }
}

vue.config.js是一個可選的配置文件

uni.css文件為全局應(yīng)用的樣式風(fēng)格。使用時需要在style節(jié)點上添加lang="scss"展懈。

<style lang="scss">
</style>

uni.scss變量:

/* 顏色變量 */

/* 行為相關(guān)顏色 */
$uni-color-primary: #007aff;
$uni-color-success: #4cd964;
$uni-color-warning: #f0ad4e;
$uni-color-error: #dd524d;

/* 文字基本顏色 */
$uni-text-color:#333;//基本色
$uni-text-color-inverse:#fff;//反色
$uni-text-color-grey:#999;//輔助灰色销睁,如加載更多的提示信息
$uni-text-color-placeholder: #808080;
$uni-text-color-disable:#c0c0c0;

/* 背景顏色 */
$uni-bg-color:#ffffff;
$uni-bg-color-grey:#f8f8f8;
$uni-bg-color-hover:#f1f1f1;//點擊狀態(tài)顏色
$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩顏色

/* 邊框顏色 */
$uni-border-color:#c8c7cc;

/* 尺寸變量 */

/* 文字尺寸 */
$uni-font-size-sm:24rpx;
$uni-font-size-base:28rpx;
$uni-font-size-lg:32rpx;

/* 圖片尺寸 */
$uni-img-size-sm:40rpx;
$uni-img-size-base:52rpx;
$uni-img-size-lg:80rpx;

/* Border Radius */
$uni-border-radius-sm: 4rpx;
$uni-border-radius-base: 6rpx;
$uni-border-radius-lg: 12rpx;
$uni-border-radius-circle: 50%;

/* 水平間距 */
$uni-spacing-row-sm: 10px;
$uni-spacing-row-base: 20rpx;
$uni-spacing-row-lg: 30rpx;

/* 垂直間距 */
$uni-spacing-col-sm: 8rpx;
$uni-spacing-col-base: 16rpx;
$uni-spacing-col-lg: 24rpx;

/* 透明度 */
$uni-opacity-disabled: 0.3; // 組件禁用態(tài)的透明度

/* 文章場景相關(guān) */
$uni-color-title: #2C405A; // 文章標題顏色
$uni-font-size-title:40rpx;
$uni-color-subtitle: #555555; // 二級標題顏色
$uni-font-size-subtitle:36rpx;
$uni-color-paragraph: #3F536E; // 文章段落顏色
$uni-font-size-paragraph:30rpx;

app.vue時我們頁面的入口文件。

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

onLaunch: 當(dāng)uni-app初始化完成時觸發(fā)存崖,全局只觸發(fā)一次冻记;
onShow: 當(dāng)uni-app啟動,或者從后臺進入前臺顯示時觸發(fā)金句;
onHide: 當(dāng)uni-app從前臺進入到后臺時觸發(fā)檩赢;
onError: 當(dāng)uni-app報錯時觸發(fā);
onUniNViewMessage: 對nvue頁面發(fā)送的數(shù)據(jù)進行監(jiān)聽违寞。

<script>  
    export default {  
        onLaunch: function() {  
            console.log('App Launch')  
        },  
        onShow: function() {  
            console.log('App Show')  
        },  
        onHide: function() {  
            console.log('App Hide')  
        }  
    }  
</script>

globalData是小程序的機制贞瞒,在uni-app也是可以使用的。

App.vue配置:

<script>  
    export default {  
        globalData: {  
            text: 'text'  
        }
    }  
</script>

獲瘸寐:

getApp().globalData.text = 'test'

用getApp對象還沒有獲取到军浆,可以用

this.$scope.globalData獲取globalData

main.js時入口文件,時初始化vue實例并使用需要的插件挡闰。

import Vue from 'vue'
import App from './App'
import pageHead from './components/page-head.vue' //引用page-head組件

Vue.config.productionTip = false
Vue.component('page-head', pageHead) //全局注冊page-head組件
App.mpType = 'app'

const app = new Vue({
    ...App
})
app.$mount() //掛載Vue實例

打印日志:console向控制臺打印日志信息乒融,debug向控制臺打印debug日志,log向控制臺打印log日志摄悯,info赞季,warn,error分別向控制臺打印,info,warn,error日志奢驯。

setTimeout() 定時器申钩,到時間后執(zhí)行,clearTimeout取消setTimeout設(shè)置的定時器瘪阁,setInterval() 設(shè)置一個定時器撒遣,clearInterval()取消由setInterval設(shè)置的定時器。

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

onLaunch 當(dāng)uni-app 初始化完成時觸發(fā)管跺,全局只觸發(fā)一次

onShow 當(dāng) uni-app 啟動义黎,或從后臺進入前臺顯示

onHide 當(dāng) uni-app 從前臺進入后臺

onError 當(dāng) uni-app 報錯時觸發(fā)

onUniNViewMessage 對 nvue 頁面發(fā)送的數(shù)據(jù)進行監(jiān)聽

<script>
    // 只能在App.vue里監(jiān)聽?wèi)?yīng)用的生命周期
    export default {
        onLaunch: function() {
            console.log('App Launch')
        },
        onShow: function() {
            console.log('App Show')
        },
        onHide: function() {
            console.log('App Hide')
        }
    }
</script>

頁面生命周期

onLoad 監(jiān)聽頁面加載

onShow 監(jiān)聽頁面顯示

onReady 監(jiān)聽頁面初次渲染完成

onHide 監(jiān)聽頁面隱藏

onUnload 監(jiān)聽頁面卸載

onResize 監(jiān)聽窗口尺寸變化

onPullDownRefresh 監(jiān)聽用戶下拉動作

onReachBottom 頁面滾動到底部的事件

onTabItemTap 點擊 tab 時觸發(fā),參數(shù)為Object

onShareAppMessage 用戶點擊右上角分享

onPageScroll 監(jiān)聽頁面滾動

onNavigationBarButtonTap 監(jiān)聽原生標題欄按鈕點擊事件

onBackPress 監(jiān)聽頁面返回

onNavigationBarSearchInputChanged 監(jiān)聽原生標題欄搜索輸入框輸入內(nèi)容變化事件

onNavigationBarSearchInputConfirmed 監(jiān)聽原生標題欄搜索輸入框搜索事件豁跑,用戶點擊軟鍵盤上的“搜索”按鈕時觸發(fā)

onNavigationBarSearchInputClicked 監(jiān)聽原生標題欄搜索輸入框點擊事件

組件生命周期

uni-app 組件支持的生命周期廉涕,與vue標準組件的生命周期相同。

beforeCreate 在實例初始化之后被調(diào)用created在實例創(chuàng)建完成后被立即調(diào)用

beforeMount 在掛載開始之前被調(diào)用mounted掛載到實例上去之后調(diào)用

beforeUpdate 數(shù)據(jù)更新時調(diào)用updated

beforeDestroy 實例銷毀之前調(diào)用destroyed實例銷毀后調(diào)用

getApp() 函數(shù)用于獲取當(dāng)前應(yīng)用實例

const app = getApp()console.log(app.globalData);

getCurrentPages() 函數(shù)用于獲取當(dāng)前頁面棧的實例

navigateTo, redirectTo 只能打開非 tabBar 頁面。

switchTab 只能打開 tabBar 頁面火的。

reLaunch 可以打開任意頁面壶愤。

getCurrentPages() 獲得的頁面里內(nèi)置了一個方法 $getAppWebview() 可以得到當(dāng)前webview的對象實例

getCurrentPages() 可以得到所有頁面對象,然后根據(jù)數(shù)組馏鹤,可以取指定的頁面webview對象

uni.$emit 觸發(fā)全局的自定事件

uni.$on 監(jiān)聽全局的自定義事件

uni.once 監(jiān)聽全局的自定義事件,事件可以由 uni.emit 觸發(fā)娇哆,但是只觸發(fā)一次

uni.$off 移除全局自定義事件監(jiān)聽器

uni.$emit('update',{msg:'頁面更新'})
uni.$on('update',function(data){
        console.log('監(jiān)聽到事件來自 update 湃累,攜帶參數(shù) msg 為:' + data.msg);
})
uni.$once('update',function(data){
        console.log('監(jiān)聽到事件來自 update ,攜帶參數(shù) msg 為:' + data.msg);
})

?? 不要忘記留下你學(xué)習(xí)的腳印喲 ??

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末碍讨,一起剝皮案震驚了整個濱河市治力,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌勃黍,老刑警劉巖宵统,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異覆获,居然都是意外死亡马澈,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門弄息,熙熙樓的掌柜王于貴愁眉苦臉地迎上來痊班,“玉大人,你說我怎么就攤上這事摹量〉臃ィ” “怎么了?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵缨称,是天一觀的道長凝果。 經(jīng)常有香客問我,道長睦尽,這世上最難降的妖魔是什么器净? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮骂删,結(jié)果婚禮上掌动,老公的妹妹穿的比我還像新娘。我一直安慰自己宁玫,他們只是感情好粗恢,可當(dāng)我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著欧瘪,像睡著了一般眷射。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天妖碉,我揣著相機與錄音涌庭,去河邊找鬼。 笑死欧宜,一個胖子當(dāng)著我的面吹牛坐榆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播冗茸,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼席镀,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了夏漱?” 一聲冷哼從身側(cè)響起豪诲,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎挂绰,沒想到半個月后屎篱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡葵蒂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年浑厚,在試婚紗的時候發(fā)現(xiàn)自己被綠了闷游。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖销斟,靈堂內(nèi)的尸體忽然破棺而出瓤逼,到底是詐尸還是另有隱情售貌,我是刑警寧澤砚殿,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站乏梁,受9級特大地震影響次洼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜遇骑,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一卖毁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧落萎,春花似錦亥啦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至媒鼓,卻和暖如春届吁,著一層夾襖步出監(jiān)牢的瞬間错妖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工疚沐, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留暂氯,地道東北人。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓亮蛔,卻偏偏與公主長得像痴施,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子尔邓,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內(nèi)容