vuecssuiant-designantdreactantantd-vueenterprisefrontendui-designvue-antdvue-antd-uivue3vuecomponent
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
150 lines
2.9 KiB
150 lines
2.9 KiB
<docs> |
|
--- |
|
order: 2 |
|
title: |
|
zh-CN: 缩起内嵌菜单 |
|
en-US: Collapsed inline menu |
|
--- |
|
|
|
## zh-CN |
|
|
|
内嵌菜单可以被缩起/展开。 |
|
|
|
你可以在 [Layout](/components/layout-cn/#components-layout-demo-side) 里查看侧边布局结合的完整示例。 |
|
|
|
## en-US |
|
|
|
Inline menu could be collapsed. |
|
|
|
Here is [a complete demo](/components/layout/#components-layout-demo-side) with sider layout. |
|
|
|
</docs> |
|
|
|
<template> |
|
<div style="width: 256px"> |
|
<a-button type="primary" style="margin-bottom: 16px" @click="toggleCollapsed"> |
|
<MenuUnfoldOutlined v-if="state.collapsed" /> |
|
<MenuFoldOutlined v-else /> |
|
</a-button> |
|
<a-menu |
|
v-model:openKeys="state.openKeys" |
|
v-model:selectedKeys="state.selectedKeys" |
|
mode="inline" |
|
theme="dark" |
|
:inline-collapsed="state.collapsed" |
|
:items="items" |
|
></a-menu> |
|
</div> |
|
</template> |
|
|
|
<script lang="ts" setup> |
|
import { reactive, watch, h } from 'vue'; |
|
import { |
|
MenuFoldOutlined, |
|
MenuUnfoldOutlined, |
|
PieChartOutlined, |
|
MailOutlined, |
|
DesktopOutlined, |
|
InboxOutlined, |
|
AppstoreOutlined, |
|
} from '@ant-design/icons-vue'; |
|
const state = reactive({ |
|
collapsed: false, |
|
selectedKeys: ['1'], |
|
openKeys: ['sub1'], |
|
preOpenKeys: ['sub1'], |
|
}); |
|
const items = reactive([ |
|
{ |
|
key: '1', |
|
icon: () => h(PieChartOutlined), |
|
label: 'Option 1', |
|
title: 'Option 1', |
|
}, |
|
{ |
|
key: '2', |
|
icon: () => h(DesktopOutlined), |
|
label: 'Option 2', |
|
title: 'Option 2', |
|
}, |
|
{ |
|
key: '3', |
|
icon: () => h(InboxOutlined), |
|
label: 'Option 3', |
|
title: 'Option 3', |
|
}, |
|
{ |
|
key: 'sub1', |
|
icon: () => h(MailOutlined), |
|
label: 'Navigation One', |
|
title: 'Navigation One', |
|
children: [ |
|
{ |
|
key: '5', |
|
label: 'Option 5', |
|
title: 'Option 5', |
|
}, |
|
{ |
|
key: '6', |
|
label: 'Option 6', |
|
title: 'Option 6', |
|
}, |
|
{ |
|
key: '7', |
|
label: 'Option 7', |
|
title: 'Option 7', |
|
}, |
|
{ |
|
key: '8', |
|
label: 'Option 8', |
|
title: 'Option 8', |
|
}, |
|
], |
|
}, |
|
{ |
|
key: 'sub2', |
|
icon: () => h(AppstoreOutlined), |
|
label: 'Navigation Two', |
|
title: 'Navigation Two', |
|
children: [ |
|
{ |
|
key: '9', |
|
label: 'Option 9', |
|
title: 'Option 9', |
|
}, |
|
{ |
|
key: '10', |
|
label: 'Option 10', |
|
title: 'Option 10', |
|
}, |
|
{ |
|
key: 'sub3', |
|
label: 'Submenu', |
|
title: 'Submenu', |
|
children: [ |
|
{ |
|
key: '11', |
|
label: 'Option 11', |
|
title: 'Option 11', |
|
}, |
|
{ |
|
key: '12', |
|
label: 'Option 12', |
|
title: 'Option 12', |
|
}, |
|
], |
|
}, |
|
], |
|
}, |
|
]); |
|
watch( |
|
() => state.openKeys, |
|
(_val, oldVal) => { |
|
state.preOpenKeys = oldVal; |
|
}, |
|
); |
|
const toggleCollapsed = () => { |
|
state.collapsed = !state.collapsed; |
|
state.openKeys = state.collapsed ? [] : state.preOpenKeys; |
|
}; |
|
</script>
|
|
|