Skip to content
On this page

Advanced usage

TOC

Nested sub menu

WARNING

The MenuGroup and MenuItem component DOES NOT provide any styles. You need to style them yourself.

You can easily create nested sub menu by using MenuGroup and MenuItem component.

If you didn't get the concept of the nested menu structure yet, please refer to the native guide

vue
<script setup>
import { ContextMenu, MenuGroup, MenuItem } from '@contextmenu/vue'
</script>

<template>
  <ContextMenu>
    <MenuGroup>
      <MenuItem>Item 1</MenuItem>
      <MenuItem>Item 2</MenuItem>
      <MenuItem>
        SubMenu1
        <!-- sub menu content -->
        <MenuGroup>
          <MenuItem>Nested1</MenuItem>
          <MenuItem>Nested2</MenuItem>
          <MenuItem>
            SubMenu2
            <!-- deep sub menu content -->
            <MenuGroup>
              <MenuItem>Apple</MenuItem>
              <MenuItem>Orange</MenuItem>
              <MenuItem>Banana</MenuItem>
            </MenuGroup>
          </MenuItem>
        </MenuGroup>
      </MenuItem>
    </MenuGroup>
  </ContextMenu>
</template>

DEMO

right click any where on the page

Access internal native instance

You can easily access native instance(which is used internally) by using v-model to get more controllability.

vue
<script setup>
import { ref } from 'vue'
import type { MenuGroupInstance } from '@contextmenu/core'
import { ContextMenu, MenuGroup, MenuItem } from '@contextmenu/vue'

// `groupInstance.value` is the native instance
const groupInstance = ref<MenuGroupInstance>()

// `itemInstance.value` is the native instance
const itemInstance = ref<MenuItemInstance>()
</script>

<template>
  <ContextMenu>
    <MenuGroup v-model="groupInstance">
      <MenuItem>Item 1</MenuItem>
      <MenuItem>Item 2</MenuItem>
      <MenuItem v-model="itemInstance">Item3</MenuItem>
    </MenuGroup>
  </ContextMenu>
</template>

Released under the MIT License.