vue中点击空白处隐藏弹框(用指令优雅地实现)
Posted dzzzz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue中点击空白处隐藏弹框(用指令优雅地实现)相关的知识,希望对你有一定的参考价值。
在写vue的项目的时候,弹框经常性出现,并要求点击弹框外面,关闭弹框,那么如何实现呢?且听我一一。。。不了,能实现效果就好
<template> <div> <div class="show" v-show="show" v-clickoutside="handleClose"> 显示 </div> </div> </template> <script> const clickoutside = { // 初始化指令 bind(el, binding, vnode) { function documentHandler(e) { // 这里判断点击的元素是否是本身,是本身,则返回 if (el.contains(e.target)) { return false; } // 判断指令中是否绑定了函数 if (binding.expression) { // 如果绑定了函数 则调用那个函数,此处binding.value就是handleClose方法 binding.value(e); } } // 给当前元素绑定个私有变量,方便在unbind中可以解除事件监听 el.__vueClickOutside__ = documentHandler; document.addEventListener(‘click‘, documentHandler); }, unbind(el, binding) { // 解除事件监听 document.removeEventListener(‘click‘, el.__vueClickOutside__); delete el.__vueClickOutside__; }, }; export default { name: ‘HelloWorld‘, data() { return { show: true, }; }, directives: {clickoutside}, methods: { handleClose(e) { this.show = false; }, }, }; </script> <!-- Add "scoped" attribute to limit CSS to this component only --> <style scoped> .show { width: 100px; height: 100px; background-color: red; } </style>
就是方便你们拷贝的。
思路:
我最初的应对思路是给弹框的其余区域加点击事件,点击之后关闭弹框,用了百分比布局。(当然low爆了)。
时间充裕的时候,就研究使用了这种方法,是否更高级呢,反正我觉得方便多了啊
简单介绍用到了的两个vue指令
bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。
unbind:只调用一次,指令与元素解绑时调用。
以上是关于vue中点击空白处隐藏弹框(用指令优雅地实现)的主要内容,如果未能解决你的问题,请参考以下文章
vue实战:三分钟实现优雅弹框 [ 项目级组件封装 ][ 超详细 ]
Vue使用directive指令实现Element中Dialog等弹框组件的移动与缩放