微信小程序自定義tabbar

微信小程序開發(fā)過程中读串,難免需要在不同的頁面中顯示不同的tabbar,也就底部的切換欄歼指。而在小程序開發(fā)中爹土,原生的tabbar只能定義一次甥雕,而且踩身,官方的tabbar切換,定義的list不能超過五項社露,如果在其他頁面中想顯示不同的tabbar或者想使用多個按鈕切換挟阻,此時就需要我們自定義組件來實現(xiàn)tabbar。

一峭弟、定義父組件

此處所說的父組件是一個正常開發(fā)的page頁附鸽,作為一個容器來承載我們所需要切換的子組件以及tabbar,具體wxml代碼如下:

index.wxml

index.wxml中主要用于放置切換的不同組件和底部的切換欄瞒瘸,這里使用的wx:if來實現(xiàn)顯隱坷备,略微一些問題,會產(chǎn)生一些延時或者小抖動的情況情臭。

<view style='margin-bottom:130rpx;'>
    <!-- 組件顯示省撑,根據(jù)自己需求添加 -->
    <view wx:if="{{ currentTab == 0 }}">
        <component_index id="component_index"/>
    </view>
    <view wx:if="{{ currentTab == 1 }}">
        <component_list id="component_list"/> 
    </view>
    <view wx:if="{{ currentTab == 2 }}">
        <component_mine id="component_mine"/>
    </view>
    
</view>

<!-- 自定義 tabbar -->
<view class="nav-tabs">
    <view class="tab-list {{currentTab == idx ? 'active' : 'default' }}" wx:for="{{items}}" wx:key="prototype" wx:for-index="idx" wx:for-item="item" data-current="{{idx}}" bindtap="swichNav">
        <text class="tab-text" wx:for-index="idx" data-current="{{idx}}" src="{{currentTab == idx ? item.selectedIconPath : item.iconPath }}">{{item.text}}</text>
        <image class="iconPath" wx:for-index="idx" data-current="{{idx}}" src="{{currentTab == idx ? item.selectedIconPath : item.iconPath }}"></image>
    </view>
</view>

具體的樣式這里就不展示了,可以去github上面找demo俯在,地址在上面

index.json

在index.json中需要定義并引入所需要使用的組件路徑

{
  "usingComponents": {
    "component_index": "/pages/component/index/index",
    "component_mine": "/pages/component/mine/mine",
    "component_list": "/pages/component/list/list"
  }
}

index.js

index.js主要定義底部tabbar的圖片和文字竟秫,以及一些在當(dāng)前頁面中使用的函數(shù)等。

let app = getApp()

Page({
    data: {
        currentTab: 0,
        //這里只做tab名和顯示圖標(biāo)
        items: [{
                "text": "主頁",
                "iconPath": "/assets/icons/index.png",
                "selectedIconPath": "/assets/icons/index_active.png"
            },
            {
                "text": "列表",
                "iconPath": "/assets/icons/list.png",
                "selectedIconPath": "/assets/icons/list_active.png"
            },
            {
                "text": "我的",
                "iconPath": "/assets/icons/mine.png",
                "selectedIconPath": "/assets/icons/mine_active.png"
            }
        ]
    },

    swichNav: function(e) {
        let that = this;
        if (this.data.currentTab === e.target.dataset.current) {
            return false;
        } else {
            that.setData({
                currentTab: e.target.dataset.current
            })
        }
    },
    onLoad: function(option) {

    }
})

注:如果子組件中涉及上拉加載的情況跷乐,可在父組件中onReachBottom中調(diào)用自組件的方法肥败,代碼如下:

this.selectComponent("子組件id名").子組件內(nèi)方法;

該方法同樣適用于獲取、修改自組件的變量值愕提。

二馒稍、子組件定義

子組件需要定義在pages下面的component中,子組件中properties可用于接受父組件傳的值浅侨,data用于定義當(dāng)前組件的初始數(shù)據(jù)纽谒,methods用于定義當(dāng)前組件內(nèi)的方法。
子組件也同樣擁有生命周期仗颈,但與page有所差距佛舱,需要注意在使用過程中的一些問題:
1椎例、created 組件實例化,但節(jié)點樹還未導(dǎo)入请祖,因此這時不能用setData订歪;
2、attached 節(jié)點樹完成肆捕,可以用setData渲染節(jié)點刷晋,但無法操作節(jié)點;
3慎陵、ready 組件布局完成眼虱,這時可以獲取節(jié)點信息,也可以操作節(jié)點席纽;
4捏悬、moved 組件實例被移動到樹的另一個位置;
5润梯、detached 組件實例從節(jié)點樹中移除过牙。
注:除了生命周期與正常的page有所區(qū)別,其他的基本類似纺铭,屬于正常的頁面開發(fā)和邏輯實現(xiàn)寇钉,主要是在調(diào)用子組件和子組件上拉加載時調(diào)用方法的問題。

如有問題舶赔,請各位及時指正扫倡,感謝!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末竟纳,一起剝皮案震驚了整個濱河市撵溃,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蚁袭,老刑警劉巖征懈,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異揩悄,居然都是意外死亡卖哎,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進(jìn)店門删性,熙熙樓的掌柜王于貴愁眉苦臉地迎上來亏娜,“玉大人,你說我怎么就攤上這事蹬挺∥兀” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵巴帮,是天一觀的道長溯泣。 經(jīng)常有香客問我虐秋,道長,這世上最難降的妖魔是什么垃沦? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任客给,我火速辦了婚禮,結(jié)果婚禮上肢簿,老公的妹妹穿的比我還像新娘靶剑。我一直安慰自己,他們只是感情好池充,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布桩引。 她就那樣靜靜地躺著,像睡著了一般收夸。 火紅的嫁衣襯著肌膚如雪坑匠。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天咱圆,我揣著相機(jī)與錄音笛辟,去河邊找鬼功氨。 笑死序苏,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的捷凄。 我是一名探鬼主播忱详,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼跺涤!你這毒婦竟也來了匈睁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤桶错,失蹤者是張志新(化名)和其女友劉穎航唆,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體院刁,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡糯钙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了退腥。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片任岸。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖狡刘,靈堂內(nèi)的尸體忽然破棺而出享潜,到底是詐尸還是另有隱情,我是刑警寧澤嗅蔬,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布剑按,位于F島的核電站疾就,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏艺蝴。R本人自食惡果不足惜虐译,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吴趴。 院中可真熱鬧漆诽,春花似錦、人聲如沸锣枝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽撇叁。三九已至供鸠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間陨闹,已是汗流浹背楞捂。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留趋厉,地道東北人寨闹。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像君账,于是被迫代替她去往敵國和親繁堡。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

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

  • 概括 注意事項 項目結(jié)構(gòu) 代碼 適配低版本 參考文檔: 小程序官方的tabBar文檔小程序官方的Component...
    國王不在家閱讀 8,091評論 0 12
  • 由于各種原因微信自帶的tabbar 無法滿足我們的需求乡数,所以采用自定義tabbar椭蹄。 自定義tabbar 有幾種方...
    coderBing閱讀 26,950評論 5 7
  • 微信小程序自帶的tabbar雖然可以滿足大多數(shù)小程序開發(fā)的要求,但一些特殊要求的小程序,比如只包含文字的tabba...
    書上說says閱讀 6,464評論 1 1
  • 今天遇到一個需求在小程序tabbar上做掃一掃的功能,但是官方提供的tabbar只能作為跳轉(zhuǎn)頁面使用净赴,只能自定義t...
    丶dove丶閱讀 151,530評論 33 21
  • 我們的生命究竟是一輩子結(jié)束后就灰飛煙滅了绳矩,還是這一輩子過完還有下一輩子、下下輩子呢玖翅?我們的生命究竟是從母親懷孕的時...
    文化微談閱讀 846評論 0 1