NavBar

导航条组件。

组件

NavBar

<NavBar> 组件。

Props

title
PropType: node

NavBar 主标题。

leftNav
PropType: array

左侧链接数据,格式为:

  1. const leftNav = [
  2. {
  3. component: 'a', // 默认为 `a`
  4. title: 'Left',
  5. href: '',
  6. customIcon: '', // 自定义图标 URL
  7. icon: '', // 图标名称,如果设置了自定义图标,则 `icon` 失效
  8. isClone: false, // 可选,如果 component 为 OffCanvasTrigger 之类的组件时,设为 true
  9. //... 其他属性
  10. },
  11. ];
rightNav
PropType: array

右侧链接数据,格式同上。

titleOnLeft
PropType: bool

主标题是否居左,默认居中。

onAction
PropType: func

链接点击时的处理函数,第一个参数为链接数据对象。

兼容性问题

Android UC

问题描述

NavBar 两侧的链接(.navbar-nav-item)应用 display: inline-flex 以后,在部分只支持 09 版 flexbox 的规范的浏览器中宽度异常(有时比实际内容宽度宽一些,有时呈块级显示)。

测试环境

  • 设备:MI 4
  • 系统:Android 6.0.1 / MIUI 7 6.4.14 开发版
  • 浏览器:UCBrowser 10.9.8.738
    解决方式

由于 UC 浏览器在特征检测中返回的数据不准确,只能通过 UA 识别,然后作回退处理。

  1. var ua = navigator.userAgent;
  2. if (/android/i.test(ua) && /ucbrowser/i.test(ua)) {
  3. document.documentElement.className += ' fb-legacy-flexbox';
  4. }
  1. .fb-legacy-flexbox .navbar-nav-item {
  2. display: inline-block;
  3. }

示例

  1. import React from 'react';
  2. import {
  3. Container,
  4. Group,
  5. NavBar,
  6. amStyles,
  7. OffCanvas,
  8. OffCanvasTrigger,
  9. } from 'amazeui-touch';
  10. const clickHandler = (item, e) => {
  11. e.preventDefault();
  12. console.log(item);
  13. };
  14. const itemLeft = {
  15. href: '#',
  16. title: 'Left'
  17. };
  18. const itemRight = {
  19. href: '#',
  20. title: 'Right'
  21. };
  22. const dataAll = {
  23. title: 'Navbar',
  24. leftNav: [{...itemLeft, icon: 'left-nav'}],
  25. rightNav: [{...itemRight, icon: 'right-nav'}],
  26. onAction: clickHandler,
  27. };
  28. const dataLeft = {
  29. title: 'Navbar',
  30. leftNav: [{...itemLeft, icon: 'left-nav'}],
  31. onAction: clickHandler,
  32. };
  33. const dataRight = {
  34. title: 'Navbar',
  35. rightNav: [itemRight, itemRight],
  36. onAction: clickHandler,
  37. };
  38. var withOffCanvas = {
  39. title: 'With OffCanvas',
  40. rightNav: [{
  41. icon: 'bars',
  42. title: 'Menu',
  43. component: OffCanvasTrigger,
  44. isClone: true, // IMPORTANT
  45. offCanvas: <OffCanvas><p>OffCanvas 内容</p></OffCanvas>,
  46. }],
  47. };
  48. const NavBarExample = React.createClass({
  49. renderStyles(style, index) {
  50. return (
  51. <div key={index}>
  52. <NavBar
  53. {...dataAll}
  54. amStyle={style.toLowerCase()}
  55. />
  56. <br />
  57. </div>
  58. );
  59. },
  60. render() {
  61. return (
  62. <Container {...this.props}>
  63. <Group
  64. header="颜色样式"
  65. >
  66. <NavBar {...dataAll} />
  67. <br />
  68. {amStyles.map(this.renderStyles)}
  69. </Group>
  70. <Group
  71. header="图标"
  72. >
  73. <NavBar {...dataLeft} rightNav={[{icon: 'bars'}]} />
  74. </Group>
  75. <Group
  76. header="多链接"
  77. >
  78. <NavBar {...dataRight} />
  79. </Group>
  80. <Group
  81. header="标题居左"
  82. >
  83. <NavBar
  84. {...dataRight}
  85. title="Title on Left"
  86. titleOnLeft
  87. />
  88. </Group>
  89. <Group
  90. header="With OffCanvas"
  91. >
  92. <NavBar
  93. {...withOffCanvas}
  94. amStyle="primary"
  95. />
  96. </Group>
  97. </Container>
  98. );
  99. }
  100. });
  101. export default NavBarExample;

DemoCopy

Version: 1.0.0

原文: http://t.amazeui.org/#/docs/navbar