导出下拉菜单的指令:(让元素显示/隐藏)
1). 导出下拉指令对象
在 src/directives
下新建 dropdown.js
文件,复制贴入以下代码:
src/directives/dropdown.js
1 xport default { 2 bind(el, binding, vnode) { 3 const handler = () => {// 当前元素的事件处理器 4 el.parentElement.classList.toggle('open')// 找到当前元素的父元素,切换它的 open 类 5 } 6 7 const documentHandler = (e) => {// document 的事件处理器 8 const target = e.target// 当前点击的目标 9 10 if (target.isSameNode(el) || el.contains(target)) return// 如果点击的是当前元素,或者是当前元素的后代节点,就不处理 11 el.parentElement.classList.remove('open')// 找到当前元素的父元素,移除 open 类 12 } 13 14 el.addEventListener('click', handler, false) 15 document.addEventListener('click', documentHandler, false) 16 17 el.destroy = () => { 18 el.removeEventListener('click', handler, false) 19 document.removeEventListener('click', documentHandler, false) 20 el.destroy = null 21 } 22 }, 23 unbind(el) { 24 el.destroy() 25 } 26 }
2). 注册全局下拉指令
打开 src/directives/index.js
文件,复制贴入以下代码:
src/directives/index.js
1 import Vue from 'vue' 2 import validator from './validator' 3 import dropdown from './dropdown' 4 5 const directives = { 6 validator, 7 dropdown 8 } 9 10 for (const [key, value] of Object.entries(directives)) { 11 Vue.directive(key, value) 12 }
我们这里使用一个循环,来注册我们的所有指令,Object.entries
返回给定对象的键值对数组,以 Object.entries(directives)
的返回为例:
[['validator', {...}], ['dropdown', {...}]]
3). 使用下拉菜单指令
打开 TheEntry.vue
文件,查找 <a href="javascript:;">
,添加 v-dropdown
:
src/components/layouts/TheEntry.vue
1 <a v-dropdown href="javascript:;"> 2 <span v-if="user"> 3 <img v-if="user.avatar" :src="user.avatar" class="avatar-topnav"> 4 <span v-if="user.name">{{ user.name }}</span> 5 </span> 6 <span v-else>佚名</span> 7 <span class="caret"></span> 8 </a>
一辈子很短,努力的做好两件事就好;第一件事是热爱生活,好好的去爱身边的人;第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱;