A Vue.js Sidebar Menu Component
npm i vue-sidebar-menu --save
Install the plugin globally.
//main.js
import Vue from 'vue'
import VueSidebarMenu from 'vue-sidebar-menu'
import 'vue-sidebar-menu/dist/vue-sidebar-menu.css'
Vue.use(VueSidebarMenu)
Or import the component locally.
//App.vue
import { SidebarMenu } from 'vue-sidebar-menu'
export default {
components: {
SidebarMenu
}
}
from v3.0.0 you will need to import the style file in your project.
<template>
<sidebar-menu :menu="menu" />
</template>
<script>
export default {
data() {
return {
menu: [
{
header: true,
title: 'Main Navigation',
// component: componentName
// visibleOnCollapse: true
},
{
href: '/',
title: 'Dashboard',
icon: 'fa fa-user',
/*
disabled: true
badge: {
text: 'new',
// class:''
}
*/
},
{
title: 'Charts',
icon: 'fa fa-chart-area',
child: [
{
href: '/charts/sublink',
title: 'Sub Link',
}
]
}
]
}
}
}
</script>
if you are using vue-router, the component will use <router-link>
instead of hyperlink <a>
props: {
menu: {
type: Array,
required: true
},
collapsed: {
type: Boolean,
default: false
},
width: {
type: String,
default: '350px'
},
widthCollapsed: {
type: String,
default: '50px'
},
showChild: {
type: Boolean,
default: false
},
theme: { // available themes: 'white-theme'
type: String,
default: ''
},
showOneChild: {
type: Boolean,
default: false
},
rtl: {
type: Boolean,
default: false
}
}
<sidebar-menu @collapse="onCollapse" @itemClick="onItemClick" />
...
methods: {
onCollapse(collapsed) {},
onItemClick(event, item) {}
}
...
@collapse(collapsed) Trigger on btn-collapse click
@itemClick(event, item) Trigger on item click
All styles customization can be done in normal CSS by using this classes
.v-sidebar-menu {}
.v-sidebar-menu.vsm-default {}
.v-sidebar-menu.vsm-collapsed {}
.v-sidebar-menu .vsm-header {}
.v-sidebar-menu .vsm-list {}
.v-sidebar-menu .vsm-dropdown > .vsm-list {}
.v-sidebar-menu .vsm-item {}
.v-sidebar-menu .vsm-item.first-item {}
.v-sidebar-menu .vsm-item.mobile-item {}
.v-sidebar-menu .vsm-item.open-item {}
.v-sidebar-menu .vsm-item.active-item {}
.v-sidebar-menu .vsm-item.parent-active-item {}
.v-sidebar-menu .vsm-link {}
.v-sidebar-menu .vsm-title {}
.v-sidebar-menu .vsm-icon {}
.v-sidebar-menu .vsm-arrow {}
.v-sidebar-menu .vsm-arrow.open-arrow {}
.v-sidebar-menu .vsm-mobile-bg {}
.v-sidebar-menu .vsm-badge {}
or you can override Sass variables and create your own theme
/*app.scss*/
@import "custom-var.scss";
@import "vue-sidebar-menu/src/scss/vue-sidebar-menu.scss";
npm install
npm run dev