Menu 菜单

定义/Definition

卡片可以控制和组织信息,通常是更复杂或详细信息的切入点。

规则 / Rule

  • 卡片是矩形,可定义为任何高度。

  • 卡片可以包含自己的页头,页脚,列表视图,图像,和里面的任何元素。

  • 卡头和内容可以是HTML。

代码演示

二级菜单

  1. import { Menu, Toast } from 'antd-mobile';
  2. let data1 = [
  3. {
  4. value: '2',
  5. label: '美食',
  6. children: [
  7. {
  8. label: '中餐',
  9. value: '21',
  10. }, {
  11. label: '全部美食',
  12. value: '22',
  13. disabled: true,
  14. }, {
  15. label: '火锅',
  16. value: '23',
  17. }, {
  18. label: '自助餐',
  19. value: '24',
  20. }, {
  21. label: '快餐',
  22. value: '25',
  23. }, {
  24. label: '小吃',
  25. value: '26',
  26. }, {
  27. label: '面包甜点',
  28. value: '27',
  29. }, {
  30. label: '生鲜水果',
  31. value: '28',
  32. }, {
  33. label: '面食',
  34. value: '29',
  35. }, {
  36. label: '休闲食品',
  37. value: '210',
  38. }, {
  39. label: '日韩料理',
  40. value: '211',
  41. }, {
  42. label: '咖啡',
  43. value: '212',
  44. }, {
  45. label: '粤菜',
  46. value: '213',
  47. }],
  48. }, {
  49. value: '1',
  50. label: '全部分类',
  51. isLeaf: true,
  52. }, {
  53. value: '3',
  54. label: '超市',
  55. children: [
  56. {
  57. label: '全部超市',
  58. value: '31',
  59. }, {
  60. label: '超市',
  61. value: '32',
  62. disabled: true,
  63. }, {
  64. label: '便利店',
  65. value: '33',
  66. }, {
  67. label: '个人护理',
  68. value: '34',
  69. }],
  70. }, {
  71. value: '4',
  72. label: '丽人',
  73. children: [
  74. {
  75. label: '全部丽人',
  76. value: '41',
  77. }, {
  78. label: '美发',
  79. value: '42',
  80. disabled: true,
  81. }, {
  82. label: '美容',
  83. value: '43',
  84. }, {
  85. label: '美甲',
  86. value: '44',
  87. }],
  88. }, {
  89. value: '5',
  90. label: '休闲娱乐',
  91. children: [
  92. {
  93. label: '全部休闲娱乐',
  94. value: '51',
  95. }, {
  96. label: '咖啡',
  97. value: '52',
  98. disabled: true,
  99. }, {
  100. label: '酒吧',
  101. value: '53',
  102. }, {
  103. label: '足疗养生洗浴',
  104. value: '54',
  105. }, {
  106. label: '保健/休闲养生',
  107. value: '55',
  108. }, {
  109. label: '棋牌休闲',
  110. value: '56',
  111. }, {
  112. label: 'KTV及其它',
  113. value: '57',
  114. }],
  115. },
  116. ];
  117. let MenuExample1 = React.createClass({
  118. getInitialState() {
  119. return {
  120. visiable: true,
  121. value: [],
  122. };
  123. },
  124. onChange(value) {
  125. Toast.info(`选中了 ${value.toString()}`);
  126. this.setState({
  127. visiable: false,
  128. });
  129. setTimeout(() => {
  130. this.setState({
  131. visiable: true,
  132. value: ['2', '23'],
  133. });
  134. }, 500);
  135. },
  136. render() {
  137. return (<div>
  138. {this.state.visiable ? (<Menu
  139. value={this.state.value}
  140. onChange={this.onChange}
  141. data={data1}
  142. />) : null}
  143. </div>);
  144. },
  145. });
  146. ReactDOM.render(<MenuExample1 />, mountNode);

单级菜单

  1. import { Menu, Toast } from 'antd-mobile';
  2. let data2 = [
  3. {
  4. label: '中餐',
  5. value: '21',
  6. }, {
  7. label: '还没生效',
  8. value: '22',
  9. disabled: true,
  10. }, {
  11. label: '火锅',
  12. value: '23',
  13. }, {
  14. label: '自助餐',
  15. value: '24',
  16. }, {
  17. label: '快餐',
  18. value: '25',
  19. }, {
  20. label: '小吃',
  21. value: '26',
  22. }, {
  23. label: '面包甜点',
  24. value: '27',
  25. }, {
  26. label: '生鲜水果',
  27. value: '28',
  28. }, {
  29. label: '面食',
  30. value: '29',
  31. }, {
  32. label: '休闲食品',
  33. value: '210',
  34. }, {
  35. label: '日韩料理',
  36. value: '211',
  37. }, {
  38. label: '咖啡',
  39. value: '212',
  40. }, {
  41. label: '粤菜',
  42. value: '213',
  43. },
  44. ];
  45. let MenuExample2 = React.createClass({
  46. getInitialState() {
  47. return {
  48. visiable: true,
  49. value: ['21'],
  50. };
  51. },
  52. onChange(value) {
  53. Toast.info(`选中了 ${value.toString()}`);
  54. this.setState({
  55. visiable: false,
  56. });
  57. setTimeout(() => {
  58. this.setState({
  59. visiable: true,
  60. value: ['23'],
  61. });
  62. }, 500);
  63. },
  64. render() {
  65. return (<div>
  66. {this.state.visiable ? (<Menu
  67. level={1}
  68. onChange={this.onChange}
  69. value={this.state.value}
  70. data={data2}
  71. />) : null}
  72. </div>);
  73. },
  74. });
  75. ReactDOM.render(<MenuExample2 />, mountNode);

Menu菜单 - 图1

API

Menu

成员说明类型可选值默认值
data筛选数据Array,元素类型是对象,必须包含labelvalue,children值为数组(children和isLeaf二选一),isLeaftrue(布尔值)时没有children属性(仅第一级支持);children数的组元素也必须包含valuevalue,另有disabled代表不可选(仅菜单第二级支持或者单级菜单的第一级)。[]
level菜单级数number1、22
value初始值Array,一级和二级筛选数据的value组成的数组[]
onChange选择后的回调Function(value)
height筛选组件的高度numberdocument.documentElement.clientHeight / 2