Vue 實現(xiàn)一個頭部導(dǎo)航欄

一個移動端的前端肯定是需要頭部導(dǎo)航欄的,頭部導(dǎo)航欄需要通過路由知道是否要顯示返回按鈕,并且根據(jù)底部導(dǎo)航欄改變title,還需要判斷是否需要隱藏底部導(dǎo)航欄。

底部導(dǎo)航欄實現(xiàn)

演示

演示

實現(xiàn)

實現(xiàn)頭部導(dǎo)航欄

我們需要在watch里觀測是否在二級頁面,那么只要知道哪些是一級頁面即可。通過topPage配置一級頁面的name,每次路由獲取to.name就可以進行判斷了。只要是二級頁面就顯示左側(cè)返回按鈕并且回調(diào)告訴App.vue需要隱藏底部的TabBar。

<template>
    <nav id="navigation" class="row">
        <div class="col-xs-2"  @click="navigationBack">
            <i class="iconfont icon-fanhui" v-if="isCanBack"></i>
        </div>
        <div class="col-xs-8">
            <span>{{title}}</span>
        </div>
    </nav>
</template>

<script>
    export default {
        name: "navigation",
        props: {
            title: String
        },
        data: function () {
            return {
                isCanBack: false,
            }
        },
        watch: {
            $route(to, from) {
                let topPage = ['HomeIndex', 'StoreList', 'Me'];
                let toName = to.name;
                let isNeedShow = true;
                for (let i=0;i<topPage.length;i++) {
                    if (toName === topPage[i]) {
                        isNeedShow = false;
                        break;
                    }
                }
                this.isCanBack = isNeedShow;
                this.$emit('need-hidden-tab-bar', isNeedShow);
            }
        },
        methods: {
            navigationBack: function () {
                this.$router.go(-1);
            }
        }
    }
</script>

<style scoped>
    nav {
        background-color: white;
        width: 100%;
        height: 44px;
        border: solid rgb(210, 210, 210);
        border-width: 0 0 1px 0;
        position: fixed;
        margin: auto;
        top: 0;
    }

    div {
        text-align: center;
        line-height: 44px;
    }

    span {
        font-size: 18px;
        font-weight: bold;
    }

</style>

# App.vue
<TabBar @select-item="onClickTabBarItem" v-if="isTop"/>

data: function () {
        return {
            navTitle: '首頁',
            isTop: true
        }
    }

methods: {
        onClickTabBarItem: function (tag) {
            if (tag === 0) {
                this.$router.replace({name: "Home"});
                this.navTitle = '首頁';
            } else if (tag === 1) {
                this.$router.replace({name: "StoreList"});
                this.navTitle = '商戶';
            } else if (tag === 2) {
                this.$router.replace({name: "Me"});
                this.navTitle = '我';
            }
        },
        isNeedHiddenTabBar: function (isNeed) {
            this.isTop = !isNeed;
        }
    }

移動到二級頁面

首先是在router.js里注冊children

import HomeIndex from 'components/home/Index'
import HomeMovie from 'components/home/Movie'
name: 'Home',
        path: '/home',
        component: Home,
        children: [
            {
                name: 'HomeIndex',
                path: 'index',
                component: HomeIndex
            },
            {
                name: 'HomeMovie',
                path: 'movie',
                component: HomeMovie
            },
            {
                path: '',
                component: HomeIndex
            }
        ]

在home組件里直接push到HomeIndex

# Home.vue
<template>
    <div id="home">
        <router-view/>
    </div>
</template>

<script>
    export default {
        name: "home",
        created: function () {
            this.$router.push({name: 'HomeIndex'});
        }
    }
</script>

<style scoped>

</style>

#Index.vue
<template>
    <div id="index">
        <button @click="nextPage">點我進入下一頁</button>
    </div>
</template>

<script>
    export default {
        name: "index",
        methods: {
            nextPage: function () {
                this.$router.push({name: 'HomeMovie'})
            }
        }
    }
</script>

<style scoped>

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

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,058評論 25 709
  • 用兩張圖告訴你,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 14,000評論 2 59
  • 1、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明AI閱讀 16,205評論 3 119
  • 沒走過遠方之前,我也以為旅行嘛,就是花錢吃喝玩樂痛快開心,其實全然不是—— 去臺灣,你會自覺上下樓梯靠右走,左邊的...
    裹聆閱讀 227評論 0 0
  • 1.730起床,早餐,粥,雞蛋,水果。 2.遛車,綠園~烤地瓜~吳中廣場~農(nóng)大~涮串~烤冷面~建工~貓咪咖~貓星咖...
    柒云氿上閱讀 200評論 0 0

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