移动端布局

alita 内置 plugin-mobile-layout 插件提供了一个页面头部有导航栏,页面底部有导航标签栏的布局。其中使用到 antd-mobile 中的 NavBarTabBar组件。

还会自动检测项目中安装的 antd-mobile 版本,自动切换到 antd-mobile@2.3.4 或者 antd-mobile@^5

配置

config/config.ts 中配置 mobileLayout:'mobile5' 开启,并设置 antd-mobile 版本。

import { defineConfig } from 'alita';
 
export default defineConfig({
  appType: 'h5',
  mobileLayout: 'mobile5', // 设置 antd-mobile 版本
});

运行时的配置

可以在 src/app.ts 中配置页面底部导航标签栏、所有页面的默认 title、页面的 title、页面头部导航栏。

通过 export mobileLayout 对象将作为配置传递给 alita 移动端布局组件,如下所示:

export const mobileLayout = {
  tabBar,
  navBar,
  documentTitle: '默认标题',
  titleList,
  customHeader
};
属性类型必填描述
tabBarTabBarProps定义页面底部导航标签栏
navBarNavBarProps定义页面头部导航栏
documentTitlestring定义所有页面的默认标题
titleListTitleListItem[]定义页面的标题
customHeader组件自定义页面的头部

定义页面底部导航标签栏

tabBar 的类型 TabBarProps 定义如下:

属性类型必填描述
colorHexColor导航标签的文字默认颜色,仅支持十六进制颜色
selectedColorHexColor导航标签的文字选中时的颜色,仅支持十六进制颜色
backgroundColorHexColor导航标签的背景色,仅支持十六进制颜色
listTabBarListItem[]导航标签的列表,最少 2 个、最多 5 个 tab
tabsGroupstring[][]当需要多套 tabBar 时配置

tabBar.list 的类型 TabBarListItem 定义如下:

属性类型必填说明
pagePathstring页面路径,必须在 pages 中先定义
textstring导航标签的文字
iconPathstring导航标签图标路径
selectedIconPathstring导航标签选中时的图标路径
iconSizestring0.44rem、20px
badgestring导航标签图标右上角显示数值 (微标数)
onPressfunction导航标签点击回调
titlestring页面标题
iconReactNode自定义导航标签
selectedIconReactNode自定义选中的导航标签

示例:

import { history } from 'alita';
import type { TabBarProps, TabBarListItem } from 'alita';
import { AppstoreOutline, FileOutline } from 'antd-mobile-icons';
 
const tabList: TabBarListItem[] = [
  {
    pagePath: '/',
    text: '首页',
    icon:<AppstoreOutline />,
    selectedIcon:<AppstoreOutline />,
    iconSize: '20px',
    title: '首页',
    onPress: () =>{
      history.replace('/');
    }
  },
  {
    pagePath: '/list',
    text: '待办',
    icon: <FileOutline />,
    selectedIcon:<FileOutline />,
    iconSize: '20px',
    title: '待办中心',
    badge: '3',
    onPress: () = {
      history.replace('/list')
    }
  },
] 
 
const tabBar: TabBarProps = {
  color: `#000000`,
  selectedColor: '#00A0FF',
  backgroungColor:'#Fff',
  list: tabList,
  tabsGroup:[['/','/list'],['/new','/ad']]
};
 
export const mobileLayout = {
  tabBar,
};

定义页面头部导航栏

navBar 的类型 NavBarProps 定义如下:

属性说明类型默认值
mode风格模式string'dark' enumlight
icon头部导航左侧,返回区域的图标ReactNode不在 tabsBar 中定义的页面,会有默认左返回图标
leftContent头部导航左侧的返回区域的右侧内容React.ReactNode
rightContent头部导航右侧内容React.ReactNode
onLeftClick头部导航左侧的返回区域点击回调(navigate) => void有左侧回退图标的默认事件是返回上一页
navList单独设置某些页面的 navbarNarBarListItem
hideNavBar隐藏 NavBar,默认有 NarBarbooleanfalse
pageBackground页面的背景颜色string'#FFF'
pageTitle页面标题string无,优先级最高

navList 的类型 NarBarListItem 定义如下:

属性类型默认值说明
pagePathstring页面路径,必须在 pages 中先定义
navBarNavBarProps当前路由的 navBar

示例:

import type { NavBarProps, NavBarListItem } from 'alita';
import { LeftOutline } from 'antd-mobile-icons';
 
const navList: NavBarListItem[] = [
  {
    pagePath: '/list',
    navBar: {
      mode: 'dark',
      icon: <LeftOutline />,
      rightContent: (<div>详情</div>),
      onLeftClick: (navigate) => {
        navigate(-1);
      },
      pageBackground: '#fff',
      pageTitle: '待办中心',
    },
  },
  {
    pagePath: '/details',
    navBar: {
      hideNavBar: false,
    }
  }
];
 
const navBar: NavBarProps = {
  mode: 'dark',
  onLeftClick: (navigate) => {
    navigate(-1);
  },
  pageBackground: '#fff',
  pageTitle: '首页',
  navList,
};
 
export const mobileLayout = {
  navBar,
};

定义页面的标题

titleList 的类型 TitleListItem[] 定义如下:

属性类型必填说明
pagePathstring页面路径,必须在 pages 中先定义
titlestring页面标题

示例:

import type { TitleListItem } from 'alita';
import { LeftOutline } from 'antd-mobile-icons';
 
const titleList: TitleListItem[] = [
  {
    pagePath: '/',
    title: '首页',
  },
];
 
export const mobileLayout = {
  titleList,
};

定义所有页面的默认标题

export const mobileLayout = {
  documentTitle: '默认标题',
};

页面标题的设置优先级

titleListtitle> tabBarlisttitle > documentTitle

动态配置

通过 alita 内置 plugin-mobile-layout 插件提供的 setPageNavBar 来配置页面头部导航栏,setTabBarList 来配置页面底部导航标签栏。