This commit is contained in:
梁灏 2018-06-21 10:22:11 +08:00
parent 5d10cf7224
commit 7d0b738455
5 changed files with 42 additions and 15 deletions

View file

@ -1,6 +1,6 @@
<template> <template>
<div> <div>
<Menu ref="menu" active-name="1-2" :open-names="openNames" theme="dark" accordion @on-open-change="handleOpenChange"> <Menu ref="menu" active-name="1-2" :open-names="openNames" theme="light" accordion @on-open-change="handleOpenChange">
<Submenu name="1"> <Submenu name="1">
<template slot="title"> <template slot="title">
<Icon type="ios-analytics"></Icon> <Icon type="ios-analytics"></Icon>
@ -20,8 +20,8 @@
<Icon type="ios-filing"></Icon> <Icon type="ios-filing"></Icon>
Navigation Two Navigation Two
</template> </template>
<MenuItem name="2-1">Option 5</MenuItem> <MenuItem name="2-1" to="/button">Option 5</MenuItem>
<MenuItem name="2-2">Option 6</MenuItem> <MenuItem name="2-2" to="//iviewui.com" target="_blank">Option 6</MenuItem>
<Submenu name="3"> <Submenu name="3">
<template slot="title">Submenu</template> <template slot="title">Submenu</template>
<MenuItem name="3-1">Option 7</MenuItem> <MenuItem name="3-1">Option 7</MenuItem>

View file

@ -107,14 +107,7 @@
handleClickLink (event) { handleClickLink (event) {
this.$emit('click', event); this.$emit('click', event);
if (this.to) { this.handleCheckClick(event);
if (this.target === '_blank') {
return false;
} else {
event.preventDefault();
this.handleClick();
}
}
} }
}, },
mounted () { mounted () {

View file

@ -1,15 +1,17 @@
<template> <template>
<li :class="classes" @click.stop="handleClick" :style="itemStyle"><slot></slot></li> <a v-if="to" :href="linkUrl" :target="target" :class="classes" @click="handleClickItem" :style="itemStyle"><slot></slot></a>
<li v-else :class="classes" @click.stop="handleClickItem" :style="itemStyle"><slot></slot></li>
</template> </template>
<script> <script>
import Emitter from '../../mixins/emitter'; import Emitter from '../../mixins/emitter';
import { findComponentUpward } from '../../utils/assist'; import { findComponentUpward, oneOf } from '../../utils/assist';
const prefixCls = 'ivu-menu'; const prefixCls = 'ivu-menu';
import mixin from './mixin'; import mixin from './mixin';
import mixinsLink from '../../mixins/link';
export default { export default {
name: 'MenuItem', name: 'MenuItem',
mixins: [ Emitter, mixin ], mixins: [ Emitter, mixin, mixinsLink ],
props: { props: {
name: { name: {
type: [String, Number], type: [String, Number],
@ -18,6 +20,20 @@
disabled: { disabled: {
type: Boolean, type: Boolean,
default: false default: false
},
to: {
type: [Object, String]
},
replace: {
type: Boolean,
default: false
},
target: {
type: String,
validator (value) {
return oneOf(value, ['_blank', '_self', '_parent', '_top']);
},
default: '_self'
} }
}, },
data () { data () {
@ -43,7 +59,7 @@
} }
}, },
methods: { methods: {
handleClick () { handleClickItem (event) {
if (this.disabled) return; if (this.disabled) return;
let parent = findComponentUpward(this, 'Submenu'); let parent = findComponentUpward(this, 'Submenu');
@ -53,6 +69,8 @@
} else { } else {
this.dispatch('Menu', 'on-menu-item-select', this.name); this.dispatch('Menu', 'on-menu-item-select', this.name);
} }
this.handleCheckClick(event);
} }
}, },
mounted () { mounted () {

View file

@ -13,6 +13,16 @@ export default {
} else { } else {
window.location.href = this.to; window.location.href = this.to;
} }
},
handleCheckClick (event) {
if (this.to) {
if (this.target === '_blank') {
return false;
} else {
event.preventDefault();
this.handleClick();
}
}
} }
} }
}; };

View file

@ -66,6 +66,12 @@
cursor: pointer; cursor: pointer;
transition: all @transition-time @ease-in-out; transition: all @transition-time @ease-in-out;
} }
a&-item{
color: inherit;
&:hover, &:active{
color: inherit;
}
}
&-item > i{ &-item > i{
margin-right: 6px; margin-right: 6px;
} }