zoukankan      html  css  js  c++  java
  • 导出下拉菜单的指令:(让元素显示/隐藏)

    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>
  • 相关阅读:
    APP之百度地图SDK的AK值获取(android)
    横向滚动菜单-选中标题居中显示
    函数按引用传参问题
    js验证提交
    Java servlet ajax
    数据库3种读
    mybatis插件
    mybatis 缓存
    从前端对象中获取的文本变为字符串,并替换其中一些指定的字符
    多个窗口开启后,切换到指定title的窗口
  • 原文地址:https://www.cnblogs.com/yangguoe/p/9309945.html
Copyright © 2011-2022 走看看