Skip to content

Instantly share code, notes, and snippets.

@languanghao
Created December 22, 2016 06:56
Show Gist options
  • Save languanghao/5f74ca361f22192ba774941a69fd275b to your computer and use it in GitHub Desktop.
Save languanghao/5f74ca361f22192ba774941a69fd275b to your computer and use it in GitHub Desktop.
element ui menu with vue-router
<template>
<el-menu :router="true" :default-active="activeLink">
<template v-for="rule in $router.options.routes">
<el-submenu v-if="rule.children && rule.children.length > 0"
:index="rule.path"
>
<template slot="title"><i :class="rule.icon"></i>{{ rule.title }}</template>
<el-menu-item v-for="child in rule.children" :index="rule.path + '/' + child.path">{{ child.title }}</el-menu-item>
</el-submenu>
<el-menu-item v-else
:index="rule.path"
>
<i :class="rule.icon"></i>
{{ rule.title }}
</el-menu-item>
</template>
</el-menu>
</template>
<style scoped lang='scss' rel="stylesheet/scss">
</style>
<script type='text/babel'>
export default {
mounted: function () {
let match = _.chain(this.$route.matched).sortBy(n => n.path.length).last().value();
this.activeLink = match.path;
},
data() {
return {
activeLink: null,
};
},
};
</script>
@entioentio
Copy link

Came here via google.
Well, I personally go with abusing relying on element's styles using its markup, since I don't really need anything fancy for this particular use.

This works like a charm:

<ul class="el-menu--horizontal el-menu">
	<router-link tag="li" class="el-menu-item" :to="{ name: 'home' }" active-class="is-active">Home</router-link>

...

.el-menu-item:not(.is-active) {
	border-bottom-color: transparent;
}

note: no updates, compatibility issues and a lot more sh*t going your way if you carelessly choose the path that I've chosen

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment