94 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Vue
		
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Vue
		
	
	
| <docs>
 | ||
| ---
 | ||
| order: 2
 | ||
| title:
 | ||
|   zh-CN: ๅชๅฑๅผๅฝๅ็ถ็บง่ๅ
 | ||
|   en-US: Open current submenu only
 | ||
| ---
 | ||
| 
 | ||
| ## zh-CN
 | ||
| 
 | ||
| ็นๅป่ๅ๏ผๆถ่ตทๅ
ถไปๅฑๅผ็ๆๆ่ๅ๏ผไฟๆ่ๅ่็ฆ็ฎๆดใ
 | ||
| 
 | ||
| ## en-US
 | ||
| 
 | ||
| Click the menu and you will see that all the other menus gets collapsed to keep the entire menu compact.
 | ||
| 
 | ||
| </docs>
 | ||
| 
 | ||
| <template>
 | ||
|   <div>
 | ||
|     <a-menu
 | ||
|       v-model:selectedKeys="selectedKeys"
 | ||
|       style="width: 256px"
 | ||
|       mode="inline"
 | ||
|       :open-keys="openKeys"
 | ||
|       @openChange="onOpenChange"
 | ||
|     >
 | ||
|       <a-sub-menu key="sub1">
 | ||
|         <template #icon>
 | ||
|           <MailOutlined />
 | ||
|         </template>
 | ||
|         <template #title>Navigation One</template>
 | ||
|         <a-menu-item key="1">Option 1</a-menu-item>
 | ||
|         <a-menu-item key="2">Option 2</a-menu-item>
 | ||
|         <a-menu-item key="3">Option 3</a-menu-item>
 | ||
|         <a-menu-item key="4">Option 4</a-menu-item>
 | ||
|       </a-sub-menu>
 | ||
|       <a-sub-menu key="sub2">
 | ||
|         <template #icon></template>
 | ||
|         <template #title>
 | ||
|           <AppstoreOutlined />
 | ||
|           Navigation Two
 | ||
|         </template>
 | ||
|         <a-menu-item key="5">Option 5</a-menu-item>
 | ||
|         <a-menu-item key="6">Option 6</a-menu-item>
 | ||
|         <a-sub-menu key="sub3" title="Submenu">
 | ||
|           <a-menu-item key="7">Option 7</a-menu-item>
 | ||
|           <a-menu-item key="8">Option 8</a-menu-item>
 | ||
|         </a-sub-menu>
 | ||
|       </a-sub-menu>
 | ||
|       <a-sub-menu key="sub4">
 | ||
|         <template #icon>
 | ||
|           <SettingOutlined />
 | ||
|         </template>
 | ||
|         <template #title>Navigation Three</template>
 | ||
|         <a-menu-item key="9">Option 9</a-menu-item>
 | ||
|         <a-menu-item key="10">Option 10</a-menu-item>
 | ||
|         <a-menu-item key="11">Option 11</a-menu-item>
 | ||
|         <a-menu-item key="12">Option 12</a-menu-item>
 | ||
|       </a-sub-menu>
 | ||
|     </a-menu>
 | ||
|   </div>
 | ||
| </template>
 | ||
| <script lang="ts">
 | ||
| import { defineComponent, reactive, toRefs } from 'vue';
 | ||
| import { MailOutlined, AppstoreOutlined, SettingOutlined } from '@ant-design/icons-vue';
 | ||
| export default defineComponent({
 | ||
|   components: {
 | ||
|     MailOutlined,
 | ||
|     AppstoreOutlined,
 | ||
|     SettingOutlined,
 | ||
|   },
 | ||
|   setup() {
 | ||
|     const state = reactive({
 | ||
|       rootSubmenuKeys: ['sub1', 'sub2', 'sub4'],
 | ||
|       openKeys: ['sub1'],
 | ||
|       selectedKeys: [],
 | ||
|     });
 | ||
|     const onOpenChange = (openKeys: string[]) => {
 | ||
|       const latestOpenKey = openKeys.find(key => state.openKeys.indexOf(key) === -1);
 | ||
|       if (state.rootSubmenuKeys.indexOf(latestOpenKey!) === -1) {
 | ||
|         state.openKeys = openKeys;
 | ||
|       } else {
 | ||
|         state.openKeys = latestOpenKey ? [latestOpenKey] : [];
 | ||
|       }
 | ||
|     };
 | ||
|     return {
 | ||
|       ...toRefs(state),
 | ||
|       onOpenChange,
 | ||
|     };
 | ||
|   },
 | ||
| });
 | ||
| </script>
 |