@@ -20,14 +20,28 @@ There are two ways to display menus:
2020
2121The first is the function mode. You can use ` this.$contextmenu ` or ` showContextMenu ` global function displays a menu with menu data:
2222
23- ``` js
23+ ::: my-sandbox {template=vue3-ts}
24+
25+ ``` ts /src/main.ts
26+ import { createApp } from ' vue'
27+ import App from ' ./App.vue'
2428import ContextMenu from ' @imengyu/vue3-context-menu'
29+ import ' @imengyu/vue3-context-menu/lib/vue3-context-menu.css'
2530
26- onContextMenu (e : MouseEvent ) {
31+ createApp (App )
32+ .use (ContextMenu )
33+ .mount (' #app' )
34+ ```
35+
36+ ``` vue /src/App.vue [active]
37+ <script setup lang="ts">
38+ import ContextMenu from '@imengyu/vue3-context-menu'
39+
40+ function onContextMenu(e : MouseEvent) {
2741 //prevent the browser's default menu
2842 e.preventDefault();
2943 //show your menu
30- this . $contextmenu ({
44+ ContextMenu.showContextMenu ({
3145 x: e.x,
3246 y: e.y,
3347 items: [
@@ -47,55 +61,80 @@ onContextMenu(e : MouseEvent) {
4761 },
4862 ]
4963 });
50-
51- // Same as this.$contextmenu
52- ContextMenu .showContextMenu ({ ... });
5364}
65+ </script>
66+
67+ <template>
68+ <button @contextmenu="onContextMenu">Right click me to show context menu!</button>
69+ </template>
5470```
5571
72+ :::
73+
5674> Note: ` this.$contextmenu ` can only be used in templates or optional api.
5775
5876The second is the component mode. You can use the component and template to display the menu:
5977
60- ``` html
61- <context-menu
62- v-model:show =" show"
63- :options =" optionsComponent"
64- >
65- <context-menu-item label =" Simple item" @click =" onMenuClick(1)" />
66- <context-menu-sperator /><!-- use this to add sperator-->
67- <context-menu-group label =" Menu with child" >
68- <context-menu-item label =" Item1" @click =" onMenuClick(2)" />
69- <context-menu-item label =" Item2" @click =" onMenuClick(3)" />
70- <context-menu-group label =" Child with v-for 50" >
71- <context-menu-item v-for =" index of 50" :key =" index" :label =" 'Item3-'+index" @click =" onLoopMenuClick(index)" />
72- </context-menu-group >
73- </context-menu-group >
74- </context-menu >
78+ ::: my-sandbox {template=vue3-ts}
79+
80+ ``` ts /src/main.ts
81+ import { createApp } from ' vue'
82+ import App from ' ./App.vue'
83+ import ContextMenu from ' @imengyu/vue3-context-menu'
84+ import ' @imengyu/vue3-context-menu/lib/vue3-context-menu.css'
85+
86+ createApp (App )
87+ .use (ContextMenu )
88+ .mount (' #app' )
7589```
7690
77- ``` js
78- data () {
79- return {
80- show: false ,
81- optionsComponent: {
82- zIndex: 3 ,
83- minWidth: 230 ,
84- x: 500 ,
85- y: 200
86- },
87- }
88- },
89- methods: {
90- onButtonClick (e : MouseEvent ) {
91- // Show component mode menu
92- this .show = true ;
93- this .options .x = e .x ;
94- this .options .y = e .y ;
95- },
91+ ``` vue /src/App.vue [active]
92+ <template>
93+ <button @contextmenu="onContextMenu">Right click me to show context menu!</button>
94+ <context-menu
95+ v-model:show="show"
96+ :options="options"
97+ >
98+ <context-menu-item label="Simple item" @click="onMenuClick(0)" />
99+ <context-menu-sperator /><!--use this to add sperator-->
100+ <context-menu-group label="Menu with child">
101+ <context-menu-item label="Item1" @click="onMenuClick(1)" />
102+ <context-menu-item label="Item2" @click="onMenuClick(2)" />
103+ <context-menu-group label="Child with v-for 50">
104+ <context-menu-item v-for="index of 50" :key="index" :label="'Item3-'+index" @click="onMenuClick(index + 3)" />
105+ </context-menu-group>
106+ </context-menu-group>
107+ </context-menu>
108+ </template>
109+
110+ <script setup lang="ts">
111+ import { ref } from 'vue';
112+ import { MenuOptions } from '@imengyu/vue3-context-menu'
113+
114+ const show = ref(false);
115+ const options = ref<MenuOptions>({
116+ zIndex: 3,
117+ minWidth: 230,
118+ x: 500,
119+ y: 200
120+ });
121+
122+ function onMenuClick(index : number) {
123+ alert('You clicked menu item ' + index)
96124}
125+ function onContextMenu(e : MouseEvent) {
126+ e.preventDefault();
127+ //Show component mode menu
128+ show.value = true;
129+ options.value.x = e.x;
130+ options.value.y = e.y;
131+ }
132+
133+ </script>
97134```
98135
136+ :::
137+
99138## Dynamic change menu
100139
101140You only need to declare the menu data as responsive data, so that you can dynamically modify the menu:
0 commit comments