Skip to content

Demo

Basic

Alignment

Variants

Menu (without arrow)


Install

bash
npm i @vuesimple/vs-menu

Usage

html
<template>
  <vs-menu :items="items" v-model="selectedItem" @item-selected="onItemSelected">Menu</vs-menu>
</template>

<script>
  import VsMenu from '@vuesimple/vs-menu';

  export default {
    components: {
      VsMenu,
    },

    data() {
      return {
        items: [
          { label: 'Item 1', key: 'item_1' },
          { label: 'Item 2', key: 'item_2' },
          { label: 'Item 3', key: 'item_3' },
          { label: 'Item 4', key: 'item_4', disabled: true },
          { label: 'Item 5', key: 'item_5' },
        ],
        selectedItem: '',
      };
    },

    methods: {
      onItemSelected(item) {
        console.info('Selected Item:', item);
      },
    },
  };
</script>

CDN

html
<script src="https://cdn.jsdelivr.net/npm/@vuesimple/vs-menu@<version>/dist/index.min.js"></script>

TIP

Replace <version> with a version number in the above url.

javascript
// Main/Entry file
app.use(VsMenu.plugin);
html
<template>
  <vs-menu :items="items" v-model="selectedItem" @item-selected="onItemSelected">Menu</vs-menu>
</template>

<script>
  export default {
    data() {
      return {
        items: [
          { label: 'Item 1', key: 'item_1' },
          { label: 'Item 2', key: 'item_2' },
          { label: 'Item 3', key: 'item_3' },
          { label: 'Item 4', key: 'item_4', disabled: true },
          { label: 'Item 5', key: 'item_5' },
        ],
        selectedItem: '',
      };
    },

    methods: {
      onItemSelected(item) {
        console.info('Selected Item:', item);
      },
    },
  };
</script>

Nuxt.js

After installation,

  • Create a file /plugins/vs-menu.js

    javascript
    import Vue from 'vue';
    import VsMenu from '@vuesimple/vs-menu';
    
    Vue.component('vs-menu', VsMenu);
  • Update nuxt.config.js

    javascript
    module.exports = {
      ...
      plugins: [
        { src: '~plugins/vs-menu', mode: 'client' }
        ...
      ]
    }
  • In the page/ component

    html
    <template>
      <vs-menu :items="items" v-model="selectedItem" @item-selected="onItemSelected">Menu</vs-menu>
    </template>
    
    <script>
      export default {
        data() {
          return {
            items: [
              { label: 'Item 1', key: 'item_1' },
              { label: 'Item 2', key: 'item_2' },
              { label: 'Item 3', key: 'item_3' },
              { label: 'Item 4', key: 'item_4', disabled: true },
              { label: 'Item 5', key: 'item_5' },
            ],
            selectedItem: '',
          };
        },
    
        methods: {
          onItemSelected(item) {
            console.info('Selected Item:', item);
          },
        },
      };
    </script>

TIP

  • For older Nuxt versions, use <no-ssr>...</no-ssr> tag.
  • You can also do import VsMenu from '@vuesimple/vs-menu' & add in component:{VsMenu} and use it within component, without globally installing in plugin folder.

Props

NameTypeDefaultDescription
itemsArray of Objects-Available: {label: "Item 1", key: "item_1" disabled: true}.
variantString-Type of button to be shown. (default, primary, secondary, warning, danger, success, light).
v-modelArray of Objects-Returns the selected item.
alignmentStringleftLeft align the menu. Available: left & right.
sizeStringmediumSize of Menu button. Available: small, medium & large.
fillBooleanfalseFill the Menu button.
isRoundBooleanfalseMake the Menu button round.
disabledBooleanfalseTo disable the Menu button.
hide-arrowBooleanfalseTo hide arrow in menu.

Events

NameDescription
item-selectedEmitted when the menu closes and an item is selected.

Slots

You can define own item markup via #slot-name:

NameDescription
(default)Holds the menu button text
menuHolds the menu dropdown content.
itemHolds the menu dropdown content line item. Access it via item