基于这个问题Detect click outside element和这个答案https://stackoverflow.com/a/42389266,我正在尝试将指令从Vue 2迁移到Vue 3。似乎binding.expression
和vnode.context
不再存在。我如何才能使其工作?
app.directive('click-outside', {
beforeMount (el, binding, vnode) {
el.clickOutsideEvent = function (event) {
if (!(el === event.target || el.contains(event.target))) {
vnode.context[binding.expression](event);
}
};
document.body.addEventListener('click', el.clickOutsideEvent);
},
unmounted (el) {
document.body.removeEventListener('click', el.clickOutsideEvent);
}
});
4条答案
按热度按时间xytpbqjk1#
你可以像这样使用
binding.value
:0x6upsns2#
脱离上下文,在vue3中有一种更简单的方法。
Link to Vueuse ClickOutside (Vue 3)
Link to Vueuse ClickOutside(Vue 2)
fjnneemd3#
挂钩解决方案:
useOnClickOutside.js
组分溶液:
用途:
vue2解决方案:
vue3:
pes8fvy94#
可以使用ref来确定元素是否包含单击的元素