记录一个vue directive实现点击指令外部区域调用函数的方案-程序员宅基地

技术标签: ViewUI  python  javascript  

 根据directive提供的API来写一个点击外部区域可以让其下拉列表消失的菜单

<div id="app" v-clock>
 <div class="main" v-clickoutside="handleClose">
  <button @click="show = !show">点击显示下拉菜单</button>
  <div class="dropdown" v-show="show">
   <p>下拉框内容,点击外面区域可以关闭</p>
  </div>
</div>
var app = new Vue({
 el: '#app',
 data: {
  show: false
 },
methods: {
 handleClose() {
  this.show = false;
 }
}
})
 
Vue.directive('clickoutside', {
 bind: function(el, binding, vode) {
  function documentHandler (e) {
   if (el.contains(e.target)) {
    return false
   }
   if (binding.expression) {
    binding.value(e)
   }
  }
  el.__vueClickOutSide__ = documentHandler
  document.addEventListener('click', documentHandler)
 },
 unbind: function(el, binding) {
  document.removeEventListener('click', el.__vueClickOutSide__)
  delete el.__vueClickOutSide__
 }
})

 

要在document上绑定click事件,所以在bind钩子内声明了一个函数documentHandler,并将它作为句柄定在document的click事件上。documentHandler函数做了两个判断,第一个是判断点击的区域是否是指令所在的元素内部,如果是,就跑出函数,不信下继续执行

contains方法是用来判断元素A是否包含了元素 B,包含返回true,不包含返回false

<div id="parent">
 父元素
 <div id="children">子元素</div>
</div>
var a = doucment.getElemengById('parent')
var b = doucment.getElemengById('children')
console.log(A.contains(B)) // true
console.log(B.contains(A)) // false

第二个判断是当前 的指令v-clickoutside有没有写表达式,在该自定义指令中,表达 式应该是第一个函数 ,在过滤了内部元素后,点击外面任何区域应该招待用户表达 式中的函数 ,所以binding.value就用来执行上下文methods中指定的函数的

 

参考: https://www.jb51.net/article/127236.htm

转载于:https://my.oschina.net/wangch5453/blog/2875875

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34240520/article/details/92508317

智能推荐

bash 脚本中嵌入 expect_bash expect-程序员宅基地

文章浏览阅读7.6k次。在 Ubuntu Terminal\text{Ubuntu Terminal}Ubuntu Terminal 中执行一些命令时总是需要交互式的输入信息,如 Y/N/passwd\text{Y/N/passwd}Y/N/passwd 等等,这可以起到提醒用户的作用,也更加保险。但是有的时候在执行自动化脚本时并不希望一直进行交互式的操作,所以 expect\text{expect}..._bash expect

java多线程总结六:经典生产者消费者问题实现-程序员宅基地

文章浏览阅读56次。这是个线程同步的经典例子,源代码如下:[java]view plaincopy<spanstyle="font-size:16px;">packagedemo.thread;/***经典生产者与消费者问题:生产者不断的往仓库中存放产品,消费者从仓库中消费产品。*其中生产者和消费者都可以有若干个。仓库容量有限,库..._5)仓库中每次只能入一人(生产者或消费者)。 6)仓库中可存放产品的数量最多5个。 7

AB实验样本量确定_abtest最小样本量确定-程序员宅基地

文章浏览阅读1.3w次,点赞10次,收藏93次。文章目录1. 统计功效与关键概念2. Z检验样本量确定2.1 统计功效公式推导2.2 样本量计算公式2.3 求解样本量3. 卡方检验样本量确定3.1 求解样本量4. 简要总结Reference在数据分析过程中,一个完整的闭环是从数据中得到洞察,根据洞察得到某种假设,通过实验检验这一假设。AB实验实际上是在做一个假设检验,可以参考上一篇笔记【概率论】- (2)假设检验,在查资料的过程中,主要有两..._abtest最小样本量确定

【Android音频开发 蒜你狠系列 :AudioRecord使用篇】淋漓尽致的AudioRecord-程序员宅基地

文章浏览阅读805次。【声明】首先,这系列文章均基于自己的理解和实践,可能有什么不对的地方,欢迎大家指正。其次,这是一个入门系列,涉及的知识也仅限于够用,深入的知识网上也有许许多多的博文供大家学习了。最后,希望大家能够有所收获。前言新房的建造,首先肯定是从地基开始架构,那么我们该如何架构好呢,请看下一步。1、构造AudioRecord我们首先通过AudioRecord的构造器,来了解下需要的参数publicAudioRecord(int audioSource, int sampleRateInHz, in_audiorecord使用

转载——Linux 汇编语言开发指南_linux 汇编 调用 wire-程序员宅基地

文章浏览阅读558次。转载地址:http://www.ibm.com/developerworks/cn/linux/l-assembly/_linux 汇编 调用 wire

Java手写单例之饿汉式、懒汉式、双重判定锁。_1、手写单例(懒汉、饿汉、双锁安全全部写一遍)-程序员宅基地

文章浏览阅读959次。Java手写单例之饿汉式、懒汉式、双重判定锁。package org.fh.action;/** * 饿汉式 * @author Administrator * */public class Singleton { /** * 私有的 final 修饰的变量 不能被二次赋值 */ private static final Singleton singleton = n..._1、手写单例(懒汉、饿汉、双锁安全全部写一遍)

随便推点

kafka之使用Kafka Connnect 来 导入/导出 数据和使用Kafka Stream来处理数据(四)_kafka导入导出工具-程序员宅基地

文章浏览阅读1.1k次。这里不是很重点,了解转载自:作者:半兽人链接:https://www.orchome.com/6来源:OrcHome1、使用 Kafka Connect 来 导入/导出 数据从控制台写入和写回数据是一个方便的开始,但你可能想要从其他来源导入或导出数据到其他系统。对于大多数系统,可以使用kafka Connect,而不需要编写自定义集成代码。Kafka Connect是导入和导出数..._kafka导入导出工具

pycharm定义空的二维数组_C/C++之二维数组详解!学习使我快乐~-程序员宅基地

文章浏览阅读577次。一、二维数组的介绍 当数组元素具有两个下标时, 该数组称为二维数组。 二维谁可以看做具有行和列的平面数据结构。二、二维数组的定义 定义二维数组的形式: 数据类型 数组名[常量表达式1][常量表达式2] ; 数据类型是数组全体元素的数据类型, 数组名用合法的标识符表示, 两个整型常量表达式可以理解为分别代表行数和列数, 与一维数组相同, 数组元素的下标一律从 0 开始..._pycharm 二维数组

[转]阮一峰:蒙特卡罗方法入门-程序员宅基地

文章浏览阅读46次。ametor阮一峰:蒙特卡罗方法入门发表于2016/4/24 10:26:54 84人阅读分类: 算法作者:阮一峰日期:2015年7月27日本文通过五个例子,介绍蒙特卡罗方法(Monte Carlo Method)。一、概述蒙特卡罗方法是一种计算方法。原理是通过大量随机样本,去了解一...

sysbench工具测试达梦数据库_stmt handle to the limit the number of statements -程序员宅基地

文章浏览阅读3.4k次。1、简单介绍 sysbench是一个开源,模块化的多线程性能测试工具,可以用来进行硬件环境性能测试,也可进行数据库的性能测试。但是由于需要支持DM测试,所以我们一般使用源码进行编译。2、运行方法 sysbench通过运行lua脚本进行数据库测试。而每次测试都分为prepare、run、cleanup这三个步骤,分别对应数据准备,运行测试,数据清理。每一次测试都是一个闭环,必须严格按照这三步来进行操作,不然会报错。 使用sysbench源码进行编译测试时,由..._stmt handle to the limit the number of statements or system of memory

当我们在谈SWIFT时,到底在谈什么?_swift作为进口商有什么顾虑-程序员宅基地

文章浏览阅读4.7k次。胜利往往伴随着放弃不切实际的幻想。当地时间2月26日,美国、英国、欧盟与加拿大发表共同声明,宣布将俄罗斯主要银行从SWIFT体系中剔除。SWIFT凭借着其强大的制裁效果,在民间一直有着金融核武器之称,因此这一劲爆消息引发了全网的热议,不少人认为此举将对于俄罗斯经济产生巨大影响;也有人认为,我国也要对此未雨绸缪,加强跨境人民币系统CIPS系统的建设;而最乐观的看法是SWIFT是一把伤敌一千自损八百的双刃剑,美国一旦把SWIFT的牌打出来,那么也就意味着美元的金融霸权即将走向终结。个SWIFT到.._swift作为进口商有什么顾虑

大唐公务员唐僧向李世民汇报工作,堪称国际最高水平-程序员宅基地

文章浏览阅读108次。唐僧呈交给唐太宗的这份取经报告,绝对是前无古人,后无来者,世界一流水平。对于现代公务员写公文而言,的确有值得学习借鉴的高深之处!尊敬的唐太宗陛下:我叫唐三藏,又名唐僧。为弘扬佛法,普度众生,超度亡魂。根据《公元627年大唐工作安排》(唐发[627]1号)的精神,成立唐三藏取经办公室,奉命到西天拜佛求经。取经办公室师徒4人历时14年,行程十万八千里,经历九九八十一难,终于取得了我佛大乘真经,圆满地完..._唐僧的工作报告,堪称史上最牛

推荐文章

热门文章

相关标签