虽然不像我想的那么简单,但这里有一个示例,演示如何将此Bootstrap下拉菜单转换为可悬停下拉菜单。
<template>
<div @mouseover="onOver" @mouseleave="onLeave">
<b-dropdown id="dropdown-1" text="Dropdown Button" ref="dropdown" class="m-md-2">
<b-dropdown-item>First Action</b-dropdown-item>
<b-dropdown-item>Second Action</b-dropdown-item>
<b-dropdown-item>Third Action</b-dropdown-item>
</b-dropdown>
</div>
</template>
<script>
export default {
methods: {
onOver() {
this.$refs.dropdown.visible = true;
},
onLeave() {
this.$refs.dropdown.visible = false;
}
}
}
</script>
这个想法是在一个包装的 div 上使用 mouseover
和 mouseleave
的 v-on 指令(一些情况下,vue 指令不能直接在 b-vue 组件上使用,但可能只是我遇到的问题)。然后使用事件触发来改变 dropdown.visible
状态。此外,在这个例子中,我利用了 Vue 的 $refs
来在脚本中获取下拉菜单。
工作示例 https://codesandbox.io/s/2erqk
多个悬停-下拉菜单
如果您计划同时在多个下拉菜单上使用此功能,则最好创建一个组件 - 将 b-dropdown 放入一个新组件中。
<template>
<div @mouseover="onOver" @mouseleave="onLeave">
<b-dropdown id="dropdown-1" text="Dropdown Button" ref="dropdown" class="m-md-2">
<slot></slot>
</b-dropdown>
</div>
</template>
<script>
export default {
name: "b-dropdown-hover",
methods: {
onOver() {
this.$refs.dropdown.visible = true;
},
onLeave() {
this.$refs.dropdown.visible = false;
}
}
};
</script>
然后像这样使用它:
<template>
<div>
<b-dropdown-hover>
<b-dropdown-item>First Action</b-dropdown-item>
<b-dropdown-item>Second Action</b-dropdown-item>
<b-dropdown-item>Third Action</b-dropdown-item>
</b-dropdown-hover>
<b-dropdown-hover>
<b-dropdown-item>First Action</b-dropdown-item>
<b-dropdown-item>Second Action</b-dropdown-item>
<b-dropdown-item>Third Action</b-dropdown-item>
</b-dropdown-hover>
</div>
</template>
<script>
import BDropdownHover from '@/components/BDropdownHover'
export default {
components : {
BDropdownHover
}
}
</script>
但是您还需要将所需的所有事件和属性从b-dropdown
中包含到新组件中。以下是一个可以正常工作的示例:https://codesandbox.io/s/romantic-elgamal-lol7h