vue点击元素外部触发事件的指令
创建js文件 v-click-outside-x
// 点击元素外部触发指令 export const clickOutside = { // 初始化指令 bind(el, binding, vnode) { function clickHandler(e) { // 这里判断点击的元素是否是本身,是本身,则返回 if (el.contains(e.target)) { return false; } // 判断指令中是否绑定了函数 if (binding.expression) { // 如果绑定了函数 则调用那个函数,此处binding.value就是handleClose方法 // binding.value(e); // 这里进行了修改, 使用arg 传递函数名称, 使用value 传递 变量值 // console.log("接收到 的arg为: " + funcName) // console.log("接收到的 value 为: " + binding.value) let that = vnode.context that[binding.arg](binding.value) } } // 给当前元素绑定个私有变量,方便在unbind中可以解除事件监听 el.__vueClickOutside__ = clickHandler; document.addEventListener('click', clickHandler); }, update() {}, unbind(el, binding) { // 解除事件监听 document.removeEventListener('click', el.__vueClickOutside__); delete el.__vueClickOutside__; }, };
在vue文件中引用
import {clickOutside} from '../../../utils/v-click-outside-x'
注册指令(和注册组件components平级位置)
directives: {
clickOutside
},
绑定指令
<div class="pointer emoArea"
v-click-outside:closeShowEmo="index"
>
methods方法
closeShowEmo(index){ console.log('index',index) },