【发布时间】:2020-12-31 07:44:49
【问题描述】:
基于这个问题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);
}
});
【问题讨论】:
-
我不知道您的具体用例,但是很多时候人们想要在事件之外使用点击,他们没有考虑到可访问性,因为只有键盘的用户可能需要相同的功能才能发生当外部发生模糊事件或“焦点”时。如果您不想重新发明轮子并且可以添加另一个库,这是我过去使用的一个很棒的库,用于实现外部点击和外部模糊。 npmjs.com/package/vue-outside-events
-
@maxshuty 感谢您的建议,但显示的库适用于 vue 2
标签: vue.js vuejs3 vue-directives