- Menu 导航菜单
- 概述
- 代码示例
- API
- Menu props
- Menu events
- Menu methods
- MenuItem props
- Submenu props
- Submenu slot
- MenuGroup props
Menu 导航菜单
概述
为页面和功能提供导航的菜单列表,常用于网站顶部和左侧。
注意:非 template/render 模式下,需使用 i-menu
。
代码示例
顶部导航
水平的顶部导航菜单。
通过设置属性 theme
为 light
、dark
、primary
可以选择主题。
通过事件 on-select
可以得到点击菜单的 name 值,从而控制页面路由或自定义操作。
<template>
<Menu mode="horizontal" :theme="theme1" active-name="1">
<MenuItem name="1">
<Icon type="ios-paper" />
内容管理
</MenuItem>
<MenuItem name="2">
<Icon type="ios-people" />
用户管理
</MenuItem>
<Submenu name="3">
<template slot="title">
<Icon type="ios-stats" />
统计分析
</template>
<MenuGroup title="使用">
<MenuItem name="3-1">新增和启动</MenuItem>
<MenuItem name="3-2">活跃分析</MenuItem>
<MenuItem name="3-3">时段分析</MenuItem>
</MenuGroup>
<MenuGroup title="留存">
<MenuItem name="3-4">用户留存</MenuItem>
<MenuItem name="3-5">流失用户</MenuItem>
</MenuGroup>
</Submenu>
<MenuItem name="4">
<Icon type="ios-construct" />
综合设置
</MenuItem>
</Menu>
<br>
<p>Change theme</p>
<RadioGroup v-model="theme1">
<Radio label="light"></Radio>
<Radio label="dark"></Radio>
<Radio label="primary"></Radio>
</RadioGroup>
</template>
<script>
export default {
data () {
return {
theme1: 'light'
}
}
}
</script>
侧栏导航
垂直导航菜单,可以内嵌子菜单。
设置 active-name
可以选中指定的菜单,设置 open-names
可以展开指定的子菜单。
设置属性 accordion
可以开启手风琴模式,每次只能展开一个子菜单。
通过设置属性 theme
为 light
、dark
可以选择主题,侧栏菜单不支持 primary 主题。
<template>
<Row>
<Col span="8">
<Menu :theme="theme2">
<Submenu name="1">
<template slot="title">
<Icon type="ios-paper" />
内容管理
</template>
<MenuItem name="1-1">文章管理</MenuItem>
<MenuItem name="1-2">评论管理</MenuItem>
<MenuItem name="1-3">举报管理</MenuItem>
</Submenu>
<Submenu name="2">
<template slot="title">
<Icon type="ios-people" />
用户管理
</template>
<MenuItem name="2-1">新增用户</MenuItem>
<MenuItem name="2-2">活跃用户</MenuItem>
</Submenu>
<Submenu name="3">
<template slot="title">
<Icon type="ios-stats" />
统计分析
</template>
<MenuGroup title="使用">
<MenuItem name="3-1">新增和启动</MenuItem>
<MenuItem name="3-2">活跃分析</MenuItem>
<MenuItem name="3-3">时段分析</MenuItem>
</MenuGroup>
<MenuGroup title="留存">
<MenuItem name="3-4">用户留存</MenuItem>
<MenuItem name="3-5">流失用户</MenuItem>
</MenuGroup>
</Submenu>
</Menu>
</Col>
<Col span="8">
<Menu :theme="theme2" active-name="1-2" :open-names="['1']">
<Submenu name="1">
<template slot="title">
<Icon type="ios-paper" />
内容管理
</template>
<MenuItem name="1-1">文章管理</MenuItem>
<MenuItem name="1-2">评论管理</MenuItem>
<MenuItem name="1-3">举报管理</MenuItem>
</Submenu>
<Submenu name="2">
<template slot="title">
<Icon type="ios-people" />
用户管理
</template>
<MenuItem name="2-1">新增用户</MenuItem>
<MenuItem name="2-2">活跃用户</MenuItem>
</Submenu>
<Submenu name="3">
<template slot="title">
<Icon type="ios-stats" />
统计分析
</template>
<MenuGroup title="使用">
<MenuItem name="3-1">新增和启动</MenuItem>
<MenuItem name="3-2">活跃分析</MenuItem>
<MenuItem name="3-3">时段分析</MenuItem>
</MenuGroup>
<MenuGroup title="留存">
<MenuItem name="3-4">用户留存</MenuItem>
<MenuItem name="3-5">流失用户</MenuItem>
</MenuGroup>
</Submenu>
</Menu>
</Col>
<Col span="8">
<Menu :theme="theme2" :open-names="['1']" accordion>
<Submenu name="1">
<template slot="title">
<Icon type="ios-paper" />
内容管理
</template>
<MenuItem name="1-1">文章管理</MenuItem>
<MenuItem name="1-2">评论管理</MenuItem>
<MenuItem name="1-3">举报管理</MenuItem>
</Submenu>
<Submenu name="2">
<template slot="title">
<Icon type="ios-people" />
用户管理
</template>
<MenuItem name="2-1">新增用户</MenuItem>
<MenuItem name="2-2">活跃用户</MenuItem>
</Submenu>
<Submenu name="3">
<template slot="title">
<Icon type="ios-stats" />
统计分析
</template>
<MenuGroup title="使用">
<MenuItem name="3-1">新增和启动</MenuItem>
<MenuItem name="3-2">活跃分析</MenuItem>
<MenuItem name="3-3">时段分析</MenuItem>
</MenuGroup>
<MenuGroup title="留存">
<MenuItem name="3-4">用户留存</MenuItem>
<MenuItem name="3-5">流失用户</MenuItem>
</MenuGroup>
</Submenu>
</Menu>
</Col>
</Row>
<br>
<p>Change theme</p>
<RadioGroup v-model="theme2">
<Radio label="light"></Radio>
<Radio label="dark"></Radio>
</RadioGroup>
</template>
<script>
export default {
data () {
return {
theme2: 'light'
}
}
}
</script>
内嵌菜单
垂直菜单,子菜单内嵌在菜单区域。
<template>
<Menu active-name="1-2" :open-names="['1']">
<Submenu name="1">
<template slot="title">
<Icon type="ios-analytics" />
Navigation One
</template>
<MenuGroup title="Item 1">
<MenuItem name="1-1">Option 1</MenuItem>
<MenuItem name="1-2">Option 2</MenuItem>
</MenuGroup>
<MenuGroup title="Item 2">
<MenuItem name="1-3">Option 3</MenuItem>
<MenuItem name="1-4">Option 4</MenuItem>
</MenuGroup>
</Submenu>
<Submenu name="2">
<template slot="title">
<Icon type="ios-filing" />
Navigation Two
</template>
<MenuItem name="2-1">Option 5</MenuItem>
<MenuItem name="2-2">Option 6</MenuItem>
<Submenu name="3">
<template slot="title">Submenu</template>
<MenuItem name="3-1">Option 7</MenuItem>
<MenuItem name="3-2">Option 8</MenuItem>
</Submenu>
</Submenu>
<Submenu name="4">
<template slot="title">
<Icon type="ios-cog" />
Navigation Three
</template>
<MenuItem name="4-1">Option 9</MenuItem>
<MenuItem name="4-2">Option 10</MenuItem>
<MenuItem name="4-3">Option 11</MenuItem>
<MenuItem name="4-4">Option 12</MenuItem>
</Submenu>
</Menu>
</template>
<script>
export default {
}
</script>
分组
使用 MenuGroup
组件进行分组。
<template>
<Menu :theme="theme3" active-name="1">
<MenuGroup title="内容管理">
<MenuItem name="1">
<Icon type="md-document" />
文章管理
</MenuItem>
<MenuItem name="2">
<Icon type="md-chatbubbles" />
评论管理
</MenuItem>
</MenuGroup>
<MenuGroup title="统计分析">
<MenuItem name="3">
<Icon type="md-heart" />
用户留存
</MenuItem>
<MenuItem name="4">
<Icon type="md-leaf" />
流失用户
</MenuItem>
</MenuGroup>
</Menu>
<br>
<p>Change theme</p>
<RadioGroup v-model="theme3">
<Radio label="light"></Radio>
<Radio label="dark"></Radio>
</RadioGroup>
</template>
<script>
export default {
data () {
return {
theme3: 'light'
}
}
}
</script>
API
Menu props
属性 | 说明 | 类型 | 默认值 |
---|---|---|---|
mode | 菜单类型,可选值为 horizontal (水平) 和 vertical (垂直) | String | vertical |
theme | 主题,可选值为 light 、dark 、primary ,其中 primary 只适用于 mode="horizontal" | String | light |
active-name | 激活菜单的 name 值 | String | Number | - |
open-names | 展开的 Submenu 的 name 集合 | Array | [] |
accordion | 是否开启手风琴模式,开启后每次至多展开一个子菜单 | Boolean | false |
width | 导航菜单的宽度,只在 mode="vertical" 时有效,如果使用 Col 等布局,建议设置为 auto | String | 240px |
Menu events
事件名 | 说明 | 返回值 |
---|---|---|
on-select | 选择菜单(MenuItem)时触发 | name |
on-open-change | 当 展开/收起 子菜单时触发 | 当前展开的 Submenu 的 name 值数组 |
Menu methods
方法名 | 说明 | 参数 |
---|---|---|
updateOpened | 手动更新展开的子目录,注意要在 $nextTick 里调用 | 无 |
updateActiveName | 手动更新当前选择项,注意要在 $nextTick 里调用 | 无 |
MenuItem props
属性 | 说明 | 类型 | 默认值 |
---|---|---|---|
name | 菜单项的唯一标识,必填 | String | Number | - |
to | 跳转的链接,支持 vue-router 对象 | String | Object | - |
replace | 路由跳转时,开启 replace 将不会向 history 添加新记录 | Boolean | false |
target | 相当于 a 链接的 target 属性 | String | _self |
append 3.4.0 | 同 vue-router append | Boolean | false |
Submenu props
属性 | 说明 | 类型 | 默认值 |
---|---|---|---|
name | 子菜单的唯一标识,必填 | String | Number | - |
Submenu slot
名称 | 说明 |
---|---|
无 | 菜单项 |
title | 子菜单标题 |
MenuGroup props
属性 | 说明 | 类型 | 默认值 |
---|---|---|---|
title | 分组标题 | String | 空 |