最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

微信小程序自定義tabBar在uni-app的適配詳解

 更新時間:2019年09月30日 11:35:21   作者:醉月思  
這篇文章主要介紹了微信小程序自定義tabBar在uni-app的適配詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
引言:此方法可用作大部分微信小程序支持,但uni-app文檔中卻找不到相關(guān)說明的API

需求

需要在微信小程序中,實現(xiàn)一個中間圖標突出顯示的異形導航欄。

如下圖

實現(xiàn)方法設(shè)計

要做這種異形的導航欄,用直接在配置文件里面寫list的方法肯定做不到。那么,就有以下兩種可替代方法。

  1. 在每一個頁面都加載一個tabBar組件,與頁面同時渲染。
  2. 設(shè)置自定義tabBar,修改tabBar的樣式。

優(yōu)缺點分析:方法1實現(xiàn)起來略為簡單,但是會出現(xiàn)代碼可重用率低,降低性能,已經(jīng)界面跳動等問題。方法2則是微信官方提供的,自定義方式,相信在性能方面也會有很大的優(yōu)勢。故選擇方法2。

1. 查看文檔及官方Demo

官方文檔

簡要描述一下就是需要在根目錄中加入一個custom-tab-bar目錄,里面的文件結(jié)構(gòu)與自定義組件的結(jié)構(gòu)一致。然后再在小程序配置文件中修改tabbar為custom模式。

官方代碼

主要重點為三個部分

配置文件

custom-tab-bar目錄

頁面生命周期中的設(shè)置索引方法

這段代碼其實很容易理解,pageLifetimes就是監(jiān)聽組件所在頁面的生命周期。上述代碼就是監(jiān)聽頁面顯示。當頁面顯示后,獲取到tabBar的對象,然后再設(shè)置tabBar中的index索引。

2. 遷移到uni-app框架

上面的方法是使用微信小程序的開發(fā)方式,而我使用的是uni-app框架開發(fā)微信小程序的。所以我們需要把它們移植到uni-app框架內(nèi)。

配置文件的修改

uni-app中,page.json被編譯為微信小程序的app.json。所以,我們直接修改page.json

custom-tab-bar目錄的適配

我們知道,uni-app使用的是類Vue開發(fā),將一個Vue文件編譯為四個微信頁面文件(wxml,wxss,json,js)。那么,是否可以直接寫一個custom-tab-bar.vue的文件呢?剛開始我也是這么想的,后來發(fā)現(xiàn)uni-app只會編譯page目錄和component目錄下的vue文件。而微信小程序要求custom-tab-bar必須在項目的根目錄下。那么就只能在uni-app下創(chuàng)建一個custom-tab-bar目錄,并老老實實寫微信四件套了。

寫完后,uni-app會將該目錄完美的復制至微信小程序項目的根目錄。

tab頁面內(nèi)的適配方法

這個在我實際開發(fā)中,是最令我頭痛的了。因為微信小程序的this引用與uni-app的this引用并不相同。所以如果直接復制代碼是會編譯出錯的。而另一個問題則是,uni-app并未提供pageLifetimes的事件監(jiān)聽。

在我經(jīng)過一番摸索之后,發(fā)現(xiàn)將設(shè)置索引方法寫在onShow事件里面,效果是等效的。接下來便只剩下this的問題了。

如果直接復制的話,會出現(xiàn)無任何效果的情況

因為uni-app的this引用不一樣,所以它在判斷getTabBar的時候,獲取的是“undefined”所以不會執(zhí)行下面的操作。如果你將判斷去掉,則會直接報“undefined”錯誤。

難道實現(xiàn)不了?其實不然,萬變不離其宗。uni-app也是編譯到小程序的,所以絕對有跡可循。

我們首先看看uni-app里面this的內(nèi)容。

我們可以很明顯的看到里面有個$mp的對象,說明這應(yīng)該是微信小程序?qū)S玫膶ο?。接下來我們繼續(xù)分析$mp。

這里面有一個隱藏很深的getTabBar方法,我們直接調(diào)用它,和在微信小程序里面調(diào)用this.getTabBar是等效的。

所以我們就可以把onShow里面的內(nèi)容寫成這樣。

一些優(yōu)雅點的封裝

設(shè)置索引方法獨立出來

在methods對象中,添加

setTabBarIndex(index){
      if (typeof this.$mp.page.getTabBar === 'function' &&
        this.$mp.page.getTabBar()) {
        this.$mp.page.getTabBar().setData({
          selected:index
        })
      }
    }

使用mixin避免重復書寫復制

main.js中,添加

Vue.mixin({
  methods:{
    setTabBarIndex(index){
      if (typeof this.$mp.page.getTabBar === 'function' &&
        this.$mp.page.getTabBar()) {
        this.$mp.page.getTabBar().setData({
          selected:index
        })
      }
    }
  }
})

混入后的使用

在頁面文件中

onShow() {
      this.setTabBarIndex(0) //index為當前tab的索引
    }

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 微信小程序image圖片加載完成監(jiān)聽

    微信小程序image圖片加載完成監(jiān)聽

    這篇文章主要為大家詳細介紹了微信小程序image圖片加載完成監(jiān)聽,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • javascript中的event loop事件循環(huán)詳解

    javascript中的event loop事件循環(huán)詳解

    這篇文章主要給大家介紹了關(guān)于javascript中event loop事件循環(huán)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-12-12
  • JavaScript使用localStorage判斷設(shè)置值是否過期

    JavaScript使用localStorage判斷設(shè)置值是否過期

    本文主要介紹了JavaScript使用localStorage判斷設(shè)置值是否過期,通過設(shè)置過期時間,我們可以使用 setItemWithExpiration 函數(shù)將數(shù)據(jù)存儲到 localStorage 中,并使用 getItemWithExpiration 函數(shù)獲取數(shù)據(jù)并檢查是否過期,感興趣的可以了解一下
    2023-05-05
  • 如何用JS判斷兩個數(shù)字的大小

    如何用JS判斷兩個數(shù)字的大小

    在JS的學習中,我們經(jīng)??赡芘龅竭@樣的問題,本文用實例演示如何正確的用JS判斷兩個數(shù)字的大小。
    2016-07-07
  • JS中URL.createObjectURL使用示例講解

    JS中URL.createObjectURL使用示例講解

    URL.createObjectURL()方法會根據(jù)傳入的參數(shù)創(chuàng)建一個指向該參數(shù)對象的URL. 這個URL的生命僅存在于它被創(chuàng)建的這個文檔里. 新的對象URL指向執(zhí)行的File對象或者是Blob對象,這篇文章主要給大家介紹了關(guān)于JS中URL.createObjectURL使用的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • iframe實用操作錦集

    iframe實用操作錦集

    這篇文章主要介紹了有關(guān)iframe的實用操作,包括高度、傳遞數(shù)據(jù)等等,感興趣的朋友可以參考下
    2014-04-04
  • Bootstrap實現(xiàn)下拉菜單多級聯(lián)動

    Bootstrap實現(xiàn)下拉菜單多級聯(lián)動

    這篇文章主要為大家詳細介紹了Bootstrap實現(xiàn)下拉菜單多級聯(lián)動,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • JavaScript 變量作用域分析

    JavaScript 變量作用域分析

    變量作用域是程序中定義這個變量的區(qū)域。先貼一段代碼,如果讀者對代碼的輸出并不感到困惑就不用往下面讀了。
    2011-07-07
  • 解析為什么axios會有params和data兩個參數(shù)

    解析為什么axios會有params和data兩個參數(shù)

    本文給大家分享為什么axios會有params和data兩個參數(shù),先來回顧一下axios的基本使用,怎么發(fā)送一個請求,本文結(jié)合實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • js模仿php中strtotime()與date()函數(shù)實現(xiàn)方法

    js模仿php中strtotime()與date()函數(shù)實現(xiàn)方法

    這篇文章主要介紹了js模仿php中strtotime()與date()函數(shù)實現(xiàn)方法,涉及javascript時間操作的相關(guān)技巧,非常具有實用價值,需要的朋友可以參考下
    2015-08-08

最新評論

马鞍山市| 木兰县| 寿光市| 遂昌县| 峡江县| 兴国县| 松原市| 巨鹿县| 麻江县| 临夏市| 北碚区| 日喀则市| 博乐市| 阿鲁科尔沁旗| 遵化市| 宜州市| 正阳县| 运城市| 关岭| 阿勒泰市| 沂南县| 黄冈市| 嵊泗县| 顺义区| 武强县| 霸州市| 普兰店市| 秦安县| 沙雅县| 株洲市| 沁阳市| 扎赉特旗| 崇文区| 安西县| 静乐县| 天台县| 汶上县| 方城县| 辰溪县| 三都| 德清县|