我正在使用Bootstrap Vue,我希望在按钮调用函数之前,我的下拉列表永远不会隐藏。我的问题是,默认情况下,单击下拉列表外或下拉按钮会隐藏下拉列表。我的模板是:
<b-dropdown
ref="dropdown"
@hide="onEditControlMenuHide"
@click.native.stop>
<b-dropdown-form>
<b-dropdown-item-button
@click="closeDropdown"
>I'm a button
</b-dropdown-item-button>
</b-dropdown-form>
</b-dropdown>
然后我的脚本中有一些简单的方法:
closeDropdown() {
this.$refs.dropdown.hide()
},
onEditControlMenuHide(bvEvent) {
bvEvent.preventDefault()
},
我试图在一个函数中捕捉bvEvent
来处理事件的来源,但在事件中找不到任何区分"在外部单击时隐藏"、"在下拉按钮上单击时隐藏,"或"因为我的自定义按钮而隐藏"的内容。我读到这可能是因为事件冒泡,所以我尝试使用@click.native.stop
,但它不起作用。任何帮助都将不胜感激!
您可以设置一个仅由按钮的click
-处理程序设置为true的标志,然后hide
-处理程序将仅在设置了该标志时取消隐藏:
export default {
methods: {
closeDropdown() {
this._okToHide = true
this.$refs.dropdown.hide()
},
onEditControlMenuHide(bvEvent) {
if (this._okToHide) {
this._okToHide = false
} else {
bvEvent.preventDefault()
}
},
}
})
演示
<b-dropdown-item-button
@click.stop="closeDropdown"
>I'm a button
</b-dropdown-item-button>
尝试使用.stop修改器,点击事件在你的按钮上,而不是在下拉菜单上,它停止了按钮上的重新构想事件,不应该触发下拉菜单上的点击事件。