@@ -23,62 +23,22 @@ Here is [a complete demo](/components/layout/#components-layout-demo-side) with
23
23
<template >
24
24
<div style =" width : 256px " >
25
25
<a-button type =" primary" style =" margin-bottom : 16px " @click =" toggleCollapsed" >
26
- <MenuUnfoldOutlined v-if =" collapsed" />
26
+ <MenuUnfoldOutlined v-if =" state. collapsed" />
27
27
<MenuFoldOutlined v-else />
28
28
</a-button >
29
29
<a-menu
30
- v-model:openKeys =" openKeys"
31
- v-model:selectedKeys =" selectedKeys"
30
+ v-model:openKeys =" state. openKeys"
31
+ v-model:selectedKeys =" state. selectedKeys"
32
32
mode =" inline"
33
33
theme =" dark"
34
- :inline-collapsed =" collapsed"
35
- >
36
- <a-menu-item key =" 1" >
37
- <template #icon >
38
- <PieChartOutlined />
39
- </template >
40
- <span >Option 1</span >
41
- </a-menu-item >
42
- <a-menu-item key =" 2" >
43
- <template #icon >
44
- <DesktopOutlined />
45
- </template >
46
- <span >Option 2</span >
47
- </a-menu-item >
48
- <a-menu-item key =" 3" >
49
- <template #icon >
50
- <InboxOutlined />
51
- </template >
52
- <span >Option 3</span >
53
- </a-menu-item >
54
- <a-sub-menu key =" sub1" >
55
- <template #icon >
56
- <MailOutlined />
57
- </template >
58
- <template #title >Navigation One</template >
59
- <a-menu-item key =" 5" >Option 5</a-menu-item >
60
- <a-menu-item key =" 6" >Option 6</a-menu-item >
61
- <a-menu-item key =" 7" >Option 7</a-menu-item >
62
- <a-menu-item key =" 8" >Option 8</a-menu-item >
63
- </a-sub-menu >
64
- <a-sub-menu key =" sub2" >
65
- <template #icon >
66
- <AppstoreOutlined />
67
- </template >
68
- <template #title >Navigation Two</template >
69
- <a-menu-item key =" 9" >Option 9</a-menu-item >
70
- <a-menu-item key =" 10" >Option 10</a-menu-item >
71
- <a-sub-menu key =" sub3" title =" Submenu" >
72
- <a-menu-item key =" 11" >Option 11</a-menu-item >
73
- <a-menu-item key =" 12" >Option 12</a-menu-item >
74
- </a-sub-menu >
75
- </a-sub-menu >
76
- </a-menu >
34
+ :inline-collapsed =" state.collapsed"
35
+ :items =" items"
36
+ ></a-menu >
77
37
</div >
78
38
</template >
79
39
80
- <script lang="ts">
81
- import { defineComponent , reactive , toRefs , watch } from ' vue' ;
40
+ <script lang="ts" setup >
41
+ import { reactive , watch , h } from ' vue' ;
82
42
import {
83
43
MenuFoldOutlined ,
84
44
MenuUnfoldOutlined ,
@@ -88,39 +48,103 @@ import {
88
48
InboxOutlined ,
89
49
AppstoreOutlined ,
90
50
} from ' @ant-design/icons-vue' ;
91
- export default defineComponent ({
92
- components: {
93
- MenuFoldOutlined ,
94
- MenuUnfoldOutlined ,
95
- PieChartOutlined ,
96
- MailOutlined ,
97
- DesktopOutlined ,
98
- InboxOutlined ,
99
- AppstoreOutlined ,
51
+ const state = reactive ({
52
+ collapsed: false ,
53
+ selectedKeys: [' 1' ],
54
+ openKeys: [' sub1' ],
55
+ preOpenKeys: [' sub1' ],
56
+ });
57
+ const items = reactive ([
58
+ {
59
+ key: ' 1' ,
60
+ icon : () => h (PieChartOutlined ),
61
+ label: ' Option 1' ,
62
+ title: ' Option 1' ,
100
63
},
101
- setup() {
102
- const state = reactive ({
103
- collapsed: false ,
104
- selectedKeys: [' 1' ],
105
- openKeys: [' sub1' ],
106
- preOpenKeys: [' sub1' ],
107
- });
108
-
109
- watch (
110
- () => state .openKeys ,
111
- (_val , oldVal ) => {
112
- state .preOpenKeys = oldVal ;
64
+ {
65
+ key: ' 2' ,
66
+ icon : () => h (DesktopOutlined ),
67
+ label: ' Option 2' ,
68
+ title: ' Option 2' ,
69
+ },
70
+ {
71
+ key: ' 3' ,
72
+ icon : () => h (InboxOutlined ),
73
+ label: ' Option 3' ,
74
+ title: ' Option 3' ,
75
+ },
76
+ {
77
+ key: ' sub1' ,
78
+ icon : () => h (MailOutlined ),
79
+ label: ' Navigation One' ,
80
+ title: ' Navigation One' ,
81
+ children: [
82
+ {
83
+ key: ' 5' ,
84
+ label: ' Option 5' ,
85
+ title: ' Option 5' ,
113
86
},
114
- );
115
- const toggleCollapsed = () => {
116
- state .collapsed = ! state .collapsed ;
117
- state .openKeys = state .collapsed ? [] : state .preOpenKeys ;
118
- };
119
-
120
- return {
121
- ... toRefs (state ),
122
- toggleCollapsed ,
123
- };
87
+ {
88
+ key: ' 6' ,
89
+ label: ' Option 6' ,
90
+ title: ' Option 6' ,
91
+ },
92
+ {
93
+ key: ' 7' ,
94
+ label: ' Option 7' ,
95
+ title: ' Option 7' ,
96
+ },
97
+ {
98
+ key: ' 8' ,
99
+ label: ' Option 8' ,
100
+ title: ' Option 8' ,
101
+ },
102
+ ],
124
103
},
125
- });
104
+ {
105
+ key: ' sub2' ,
106
+ icon : () => h (AppstoreOutlined ),
107
+ label: ' Navigation Two' ,
108
+ title: ' Navigation Two' ,
109
+ children: [
110
+ {
111
+ key: ' 9' ,
112
+ label: ' Option 9' ,
113
+ title: ' Option 9' ,
114
+ },
115
+ {
116
+ key: ' 10' ,
117
+ label: ' Option 10' ,
118
+ title: ' Option 10' ,
119
+ },
120
+ {
121
+ key: ' sub3' ,
122
+ label: ' Submenu' ,
123
+ title: ' Submenu' ,
124
+ children: [
125
+ {
126
+ key: ' 11' ,
127
+ label: ' Option 11' ,
128
+ title: ' Option 11' ,
129
+ },
130
+ {
131
+ key: ' 12' ,
132
+ label: ' Option 12' ,
133
+ title: ' Option 12' ,
134
+ },
135
+ ],
136
+ },
137
+ ],
138
+ },
139
+ ]);
140
+ watch (
141
+ () => state .openKeys ,
142
+ (_val , oldVal ) => {
143
+ state .preOpenKeys = oldVal ;
144
+ },
145
+ );
146
+ const toggleCollapsed = () => {
147
+ state .collapsed = ! state .collapsed ;
148
+ state .openKeys = state .collapsed ? [] : state .preOpenKeys ;
149
+ };
126
150
</script >
0 commit comments