Skip to content

NavigationBar 导航栏

此组件通常用于自定义导航栏。

基础使用

  • 此组件默认高度为 44px
vue
<hi-navigation-bar></hi-navigation-bar>

背景

可以通过 bg 属性设置导航栏背景,也可以通过 autoBg 属性来设置是否开启自动读取在 pages.json 中配置的 navigationBarBackgroundColor 值用作导航栏背景, autoBg 默认为 true

vue
<hi-navigation-bar autoBg></hi-navigation-bar>
<hi-navigation-bar bg="#ff0000"></hi-navigation-bar>

设置标题

标题文本

可以通过 title 属性设置导航栏标题,也可以通过 autoTitle 属性来设置是否自动读取在 pages.json 中配置的 navigationBarTitleText 值用作导航栏标题, autoTitle 默认为 true

标题颜色

标题的颜色默认读取 pages.json 中配置的 navigationBarTextStyle 值用作导航栏标题颜色。也可以通过 colortitleColor 属性自定义设置标题颜色。

vue
<hi-navigation-bar autoTitle></hi-navigation-bar>
<hi-navigation-bar title="导航栏标题" titleColor="#ff0000"></hi-navigation-bar>

标题对齐方式

通过 align 属性设置标题对齐方式,可选值为:leftcenterright

vue
<hi-navigation-bar title="标题居左" align="left"></hi-navigation-bar>
<hi-navigation-bar title="标题居中" align="center"></hi-navigation-bar>
<hi-navigation-bar title="标题居右" align="right"></hi-navigation-bar>

返回按钮

  • 通过 showBack 属性设置是否开启显示返回按钮。
  • 通过 backText 属性设置返回文字。

提示

showBack 的描述为是否开启显示返回按钮,设置为 true 时并不一定会显示返回按钮,这是因为组件还可以设置 autoShowBack 并且默认为 trueautoShowBacktrue 时,表示开启让组件自己判断是否显示返回按钮,判断逻辑为,当 showBacktrue,并且当前页面不是 tabbar 页面,并且当前页面不是页面栈中的唯一一个页面时才会显示返回按钮。如果需要手动控制返回按钮的显示隐藏,请将 autoShwowBack 设置为 false 并通过 showBack 手动控制返回按钮的显示状态。

vue
<hi-navigation-bar title="手动控制返回按钮" :autoShowBack="false" :showBack="true" backText="返回"></hi-navigation-bar>

自动返回

通过 autoBack 设置点击返回按钮后是否自动返回上一页。默认为 true。如果在返回上一页之前需要处理其他逻辑,请将 autoBack 设置为 false,等处理完逻辑后在手动调用 api 返回上一页。

vue
<template>
    <hi-navigation-bar title="标题" :autoBack="false" :autoShowBack="false" :showBack="true" backText="返回" @back="handleBack"></hi-navigation-bar>
</template>

<script setup>
    // 返回事件
    function handleBack() {
        // ... 处理逻辑

        // 返回上一页
        uni.$hiRouter.back();

        // 或
        uni.navigateBack({
            delta: 1
        });
    }
</script>

菜单

为了应对开发中常见的需求,此组件还提供了菜单栏的功能,通过 leftMenu 设置左侧菜单数据,通过 rightMenu 设置右侧菜单数据,菜单项数据格式如下示例:

vue
<template>
    <hi-navigation-bar :leftMenu="menus" :rightMenu="menus"></hi-navigation-bar>
</template>

<script setup>
    import { ref } from 'vue';

    // 菜单数据
    // 菜单数据格式如下,所有属性都为可选,为空则不显示或不设置
    const menus = ref([
        {
            icon: "weixin", // 菜单图标
            text: "微信", // 菜单文本
            disabled: false, // 菜单是否禁用
            class: "navigation-bar-menu--weixin" // 菜单类名
            style: "color: red" // 菜单样式
            hover: "h-hover", // 菜单点击态类名
            iconStyle: "color: red" // 菜单图标样式
            textStyle: "color: red" // 菜单文本样式
        }
    ]);
</script>

Props

属性名说明类型默认值可选值版本
hover指定返回按钮、菜单按下去的样式类Stringhi-hover--
title导航栏标题String---
titleColor导航栏标题颜色String-`--
titleFontSize导航栏标题字体大小String---
titleFontWeight导航栏标题字体粗细String---
autoTitle是否自动设置标题Booleantruefalse-
align导航栏标题对齐方式Stringcenterleftright-
showBack是否显示返回按钮Booleantruefalse-
autoShowBack是否自动显示返回按钮Booleantruefalse-
autoBack点击后是否自动返回上一页Booleantruefalse-
backText返回按钮文本String---
backIcon返回按钮图标String__zuo--
color组件文字颜色String---
fontSize组件文字大小String---
height组件高度String---
bg组件背景String---
autoBg是否自动设置背景Booleantruefalse-
backFontSize返回按钮字体大小String---
backColor返回按钮字体颜色String---
backFontWeight返回按钮字体粗细String---
backIconColor返回按钮图标颜色String---
backIconSize返回按钮图标大小String---
leftMenu左侧菜单数据Array<Object>null--
rightMenu右侧菜单数据Array<Object>null--
menuColor菜单字体颜色String---
menuFontSize菜单字体大小String---
menuIconColor菜单图标颜色String---
menuIconSize菜单图标大小String---

Event

事件名说明回调参数版本
back返回按钮点击事件--
menuClick菜单点击事件menu: 按钮数据。current: 按钮下标。position: 按钮位置,left / right-
leftMenuClick左侧菜单点击事件menu: 按钮数据。current: 按钮下标。-
rightMenuClick右侧菜单点击事件menu: 按钮数据。current: 按钮下标。-

Slots

名称说明参数版本
back返回按钮插槽--
left左侧内容插槽,不包含返回按钮--
title标题插槽--
right右侧内容插槽--

样式变量

组件提供了以下样式变量,可以在使用时设置这些变量来修改组件的样式。

变量名默认值版本
--hi-navigation-bar-height44px-
--hi-navigation-bar-displayflex-
--hi-navigation-bar-align-itemscenter-
--hi-navigation-bar-padding0 8px-
--hi-navigation-bar-gap8px-
--hi-navigation-bar-backgroundtransparent-
--hi-navigation-bar-colorinherit-
--hi-navigation-bar-font-sizeinherit-
--hi-navigation-bar-z-indexvar(--hi-index-upper)-
--hi-navigation-bar-left-flex-shrink0-
--hi-navigation-bar-left-flex1 / none-
--hi-navigation-bar-left-displayflex-
--hi-navigation-bar-left-align-itemscenter-
--hi-navigation-bar-left-justify-contentflex-start-
--hi-navigation-bar-left-gap0-
--hi-navigation-bar-back-font-size14px-
--hi-navigation-bar-back-colorinherit-
--hi-navigation-bar-back-font-weight500-
--hi-navigation-bar-back-displayflex-
--hi-navigation-bar-back-align-itemscenter-
--hi-navigation-bar-back-gap0-
--hi-navigation-bar-back-icon-colorinherit-
--hi-navigation-bar-back-icon-font-size22px-
--hi-navigation-bar-center-flex-shrink0-
--hi-navigation-bar-center-flex2 / 1-
--hi-navigation-bar-center-displayblock-
--hi-navigation-bar-title-colorinherit-
--hi-navigation-bar-title-font-size17px-
--hi-navigation-bar-title-font-weight700-
--hi-navigation-bar-title-text-aligncenter / left / right-
--hi-navigation-bar-right-flex-shrink0-
--hi-navigation-bar-right-flex1 / none-
--hi-navigation-bar-right-displayflex-
--hi-navigation-bar-right-align-itemscenter-
--hi-navigation-bar-right-justify-contentflex-end-
--hi-navigation-bar-menu-button-width0-
--hi-navigation-bar-menus-colorinherit-
--hi-navigation-bar-menus-displayflex-
--hi-navigation-bar-menus-align-itemscenter-
--hi-navigation-bar-menus-font-size12px-
--hi-navigation-bar-menus-text-aligncenter-
--hi-navigation-bar-menus-gap10px-
--hi-navigation-bar-menu-displayflex-
--hi-navigation-bar-menu-flex-directioncolumn-
--hi-navigation-bar-menu-flex-align-itemscenter-
--hi-navigation-bar-menu-flex-justify-contentcenter-
--hi-navigation-bar-menu-gap2px-
--hi-navigation-bar-menu-line-height1-
--hi-navigation-bar-menu-icon-colorinherit-
--hi-navigation-bar-menu-icon-font-size18px-

基于 MIT 许可发布