vue通过指令(directives)实现点击空白处收起下拉框


Posted in Javascript onDecember 06, 2018

日常开发中有时会有这样的需求,就是展开下拉框的时候,通过点击空白处,可以实现让下拉框收回。这里我们通过vue2.0中的自定义指令来简单实现。

vue通过指令(directives)实现点击空白处收起下拉框

貌似截图尺寸有点大(???)

vue自定义指令

解释(参考官方文档)

除了核心功能默认内置的指令 (v-model 和 v-show),Vue 也允许注册自定义指令。注意,在 Vue2.0 中,代码复用和抽象的主要形式是组件。然而,有的情况下,你仍然需要对普通 DOM 元素进行底层操作,这时候就会用到自定义指令。

举例:

我们要让这样一个输入框在页面加载的时候获得焦点

vue通过指令(directives)实现点击空白处收起下拉框

我们可以注册自定义指令

全局注册:

// 注册一个全局自定义指令 `v-focus`
Vue.directive('focus', {
 // 当被绑定的元素插入到 DOM 中时……
 inserted: function (el) {
 // 聚焦元素
 el.focus()
 }
})

局部注册

//组件内
directives: {
 focus: {
 // 指令的定义
 inserted: function (el) {
 el.focus()
 }
 }
}

然后便可以在模板中相关元素上使用自定义的v-focus属性:(这里的v-focus是从自定义的focus得来的)

<input v-focus>

钩子函数(参考官方文档)

上面例子中我们用的钩子是inserted,这个是在被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。
vue官方文档上有一些钩子可供我们参考使用:

  • bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。
  • inserted:被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。
  • update:所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有。但是你可以通过比较更新前后的值来忽略不必要的模板更新 (详细的钩子函数参数见下)。
  • componentUpdated:指令所在组件的 VNode 及其子 VNode 全部更新后调用。
  • unbind:只调用一次,指令与元素解绑时调用。

通过自定义指令实现点击空白处隐藏下拉框

关于自定义指令,我们就不再多说了,下面我们来讲下如何通过指令来实现我们这个需求吧。

首先注册全局指令

// 一般在vue项目中的main.js中
// 添加点击空白处的指令
Vue.directive('click-outside', {
 bind: function (el, binding, vnode) {
 el.clickOutsideEvent = function (event) {
 // here I check that click was outside the el and his childrens
 if (!(el == event.target || el.contains(event.target))) {
 // and if it did, call method provided in attribute value
 vnode.context[binding.expression](event)
 }
 }
 document.body.addEventListener('click', el.clickOutsideEvent)
 },
 unbind: function (el) {
 document.body.removeEventListener('click', el.clickOutsideEvent)
 }
})

在需要监听的组件元素上添加自定义指令

// 这里的clickOutSide是在监听到点击的不是
<input id="dropdown1" v-show="flag" v-click-outside="clickOutSide" />

这个id为dropdown1的元素当监听到点击的不是自身的时候,就会触发clickOutSide方法。

在组件里定义响应方法

// 点击空白处使topBar隐藏
 clickOutSide() {
 this.flag = false;
 },

这样就可以实现类似文章开头的那种效果。

是不是很简单哦? 关于指令还有很多比较简便的用法,各位可以自己去研究下哦。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
基于Jquery的简单&amp;简陋Tabs插件代码
Feb 09 Javascript
JavaScript Date对象 日期获取函数
Dec 19 Javascript
js判断屏幕分辨率的代码
Jul 16 Javascript
JS中prototype关键字的功能介绍及使用示例
Jul 21 Javascript
jQuery中contents()方法用法实例
Jan 08 Javascript
JavaScript判断浏览器对CSS3属性是否支持的多种方法
Nov 13 Javascript
Vue进度条progressbar组件功能
Apr 17 Javascript
vue下history模式刷新后404错误解决方法
Aug 18 Javascript
详解Node.js中path模块的resolve()和join()方法的区别
Oct 29 Javascript
关于vue状态过渡transition不起作用的原因解决
Apr 09 Javascript
js找出5个数中最大的一个数和倒数第二大的数实现方法示例小结
Mar 04 Javascript
elementUI同一页面展示多个Dialog的实现
Nov 19 Javascript
Vue-CLI3.x 设置反向代理的方法
Dec 06 #Javascript
JavaScript中引用vs复制示例详析
Dec 06 #Javascript
使用jQuery动态设置单选框的选中效果
Dec 06 #jQuery
express+vue+mongodb+session 实现注册登录功能
Dec 06 #Javascript
如何使用puppet替换文件中的string
Dec 06 #Javascript
详解vantUI框架在vue项目中的应用踩坑
Dec 06 #Javascript
基于element-ui组件手动实现单选和上传功能
Dec 06 #Javascript
You might like
Ajax+PHP 边学边练 之二 实例
2009/11/24 PHP
php生成静态文件的多种方法分享
2012/07/17 PHP
php将url地址转化为完整的a标签链接代码(php为url地址添加a标签)
2014/01/17 PHP
Codeigniter出现错误提示Error with CACHE directory的解决方案
2014/06/12 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
基于jQuery实现的当离开页面时出现提示的实现代码
2011/06/27 Javascript
jquery实现marquee效果(文字或者图片的水平垂直滚动)
2013/01/07 Javascript
DWZ table的原生分页浅谈
2013/03/01 Javascript
js检查页面上有无重复id的实现代码
2013/07/17 Javascript
js动态添加事件并可传参数示例代码
2013/10/21 Javascript
JavaScript之IE的fireEvent方法详细解析
2013/11/20 Javascript
转换字符串为json对象的方法详解
2013/11/29 Javascript
jQuery实现统计复选框选中数量
2014/11/24 Javascript
javascript密码强度校验代码(两种方法)
2015/08/10 Javascript
JS实现环形进度条(从0到100%)效果
2016/07/05 Javascript
详解nodejs http请求相关总结
2019/03/31 NodeJs
JavaScript组合设计模式--改进引入案例分析
2020/05/23 Javascript
Python中defaultdict与lambda表达式用法实例小结
2018/04/09 Python
用python写扫雷游戏实例代码分享
2018/05/27 Python
pandas删除指定行详解
2019/04/04 Python
docker django无法访问redis容器的解决方法
2019/08/21 Python
python爬虫 线程池创建并获取文件代码实例
2019/09/28 Python
python同义词替换的实现(jieba分词)
2020/01/21 Python
详解python内置常用高阶函数(列出了5个常用的)
2020/02/21 Python
车间班组长岗位职责
2013/11/13 职场文书
关于人生的感言
2014/01/17 职场文书
中学生操行评语
2014/04/24 职场文书
关心下一代工作先进事迹
2014/08/15 职场文书
努力工作保证书
2015/02/28 职场文书
支教个人总结
2015/03/04 职场文书
2015年九一八事变纪念日演讲稿
2015/03/19 职场文书
酒店财务部岗位职责
2015/04/14 职场文书
工厂员工辞职信范文
2015/05/12 职场文书
新郎父母婚礼致辞
2015/07/27 职场文书
HTML基础-标签分类(闭合标签,空标签,块级元素,行内元素,行级块元素,可替换元素)
2021/03/31 HTML / CSS
JavaScript实现简单的音乐播放器
2022/08/14 Javascript