Open ivan135 opened 4 years ago
在pc端的select组件和自定义的日历组件香相结合的场景,点击select组件,显示日历组件,点击select组件外的元素,日历组件会隐藏。 参考了iview的select组件的实现方式,可以用自定义指令来实现。
//outside.js export default { // 初始化指令 bind(el, binding, vnode) { function clickHandler(e) { // 这里判断点击的元素是否是本身,是本身,则返回 if (el.contains(e.target)) { return false; } // 判断指令中是否绑定了函数 if (binding.expression) { // 如果绑定了函数 则调用那个函数,此处binding.value就是handleClose方法 binding.value(e); } } // 给当前元素绑定个私有变量,方便在unbind中可以解除事件监听 el.__vueClickOutside__ = clickHandler; document.addEventListener('click', clickHandler); }, update() {}, unbind(el, binding) { // 解除事件监听 document.removeEventListener('click', el.__vueClickOutside__); delete el.__vueClickOutside__; }, };
1.需求场景
在pc端的select组件和自定义的日历组件香相结合的场景,点击select组件,显示日历组件,点击select组件外的元素,日历组件会隐藏。 参考了iview的select组件的实现方式,可以用自定义指令来实现。
2.代码实现