一、效果

二、封装指令
const clickoutside = {
bind(el, binding) {
const documentHandler = e => {
if (el.contains(e.target)) return console.log('点击了自己')
if (binding.expression) {
binding.value(e)
}
}
el.__vueClickOutside__ = documentHandler
document.addEventListener('click', documentHandler)
},
unbind(el) {
document.removeEventListener('click', el.__vueClickOutside__)
delete el.__vueClickOutside__
}
}
三、使用
<div class="box" v-clickoutside="clickoutside"></div>
clickoutside(...rest) {
console.log('点击自身以外的位置', ...rest)
}