vue中的自定义指令clickOutside

目录
  • 自定义指令clickOutside
    • 首先我们先看看vue官方的文档
    • clickoutside 这个指令用在哪里呢?
    • 写法
  • 自定义指令clickoutside使用及扩展用法

自定义指令clickOutside

这个指令通过vue的自定义指令的钩子函数实现。

首先我们先看看vue官方的文档

emmmm 看着好像有点困难,没关系官方文档也给出了例子。

现在应该就明白了不少了吧。

clickoutside 这个指令用在哪里呢?

比如

写法

export default {
    bind (el, binding, vnode) {
        function documentHandler (e) {
        // el 包含其触发的元素 那当然不能触发啦
            if (el.contains(e.target)) {
                return false;
            }
            // 满足上面条件, 并且expression 的值不为空 触发(希望value是个函数)
            if (binding.expression) {
            	//	调用自定义指令传来的函数,e是事件原对象 作为参数(为什么传e 因为有些情况需要把这个对象抛出方便用户的操作)
                binding.value(e);
            }
        }
        // 嗯??? 这么写有什么作用吗? 当然有了,如果你想取消事件的监听,那么是不是需要这个函数。
        el.__vueClickOutside__ = documentHandler;
        // 在document上监听事件
        document.addEventListener('click', documentHandler);
    },
    update () {
    },
    unbind (el, binding) {
    // 取消事件监听(el.__vueClickOutside 派上用场了吧)
        document.removeEventListener('click', el.__vueClickOutside__);
        // 既然都取消了 那么这个属性就没必要存在了
        delete el.__vueClickOutside__;
    }
};

下拉框组件上的引用

呐 大功告成!!!

自定义指令clickoutside使用及扩展用法

<template>
  <div class="testPage">
       <div class="block" @click="onShow" v-click-outside="closeDialog">111</div>
       <div class="show" v-if="flag">QQQQQQQQQQ</div>
       <!-- <input v-focus> -->
       <!-- <el-input v-focus type="text" /> -->
       <!-- <div v-click-outside="closeDialog">222</div> -->
  </div>
</template>
<script>
// import global from '../common/global';
 
export default {
  data() {
    return {
      flag:false,
      list:[{id:'1',name:'张三',seen:false},{id:'2',name:'李四',seen:false}],
      /* input11: '',
      numberValidateForm: {
          age: 0,
          height: '175'
        },
        rules_V: {
          height: [{ validator: validateHeight, trigger: 'blur' }]
        } */
    };
  },
 
  components: {},
  created() {},
  methods: {
    onShow(){
      this.flag=true;
    },
    closeDialog(){
       this.flag=! this.flag;
    },
     handleIconClick(ev) {
       window.open('https://www.baidu.com/','_self');
    },
    onClick(item,index){
      console.log(item,index)
      // console.log(this.list)
      item.seen=true;
      this.$set(this.list,index,item);
      console.log(this.list)
    }
  }
  ,
  directives: {
  clickOutside : {
  bind(el, binding, vnode) {
    function clickHandler(e) {
      if (el.contains(e.target)) {
        return false;
      }
      if (binding.expression) {
        binding.value(e);
      }
    }
    el.__vueClickOutside__ = clickHandler;
    document.addEventListener('click', clickHandler);
  },
  update() {},
  unbind(el, binding) {
    document.removeEventListener('click', el.__vueClickOutside__);
    delete el.__vueClickOutside__;
  },
  }
}
};
</script>
<style lang="less" scoped>
.testPage {
  width: 100%;
  height: 100%;
  .el-input--width{
    border-radius: 20px;
    width: 100px;
  }
  .block{
    width: 100px;
    height: 100px;
    background-color: #f90;
  } 
}
</style>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • vue的自定义指令传参方式

    目录 自定义指令传参 指令 环境 传参方式 自定义指令动态参数 自定义指令传参 指令 在vue官网中,常用指令有v-model和v-bind,但是,如果我们需要对DOM元素进行底层操作,就需要用到自定义指令. 今天主要讲到传参的2种方式. 环境 vue2.3.3 node6.11.2 webpack2.6.1 传参方式 在main.js中定义一个指令. Vue.directive('zoom', {     bind: function (el, binding, vnode) {      

  • Vue.js自定义指令的基本使用详情

    目录 函数式 对象式 使用时的一些坑 总结 函数式 需求1:定义一个v-big指令,和v-text功能类似,但会把绑定的数值放大10倍 <div id="root"> <h2>当前的n值是<span v-text="n"></span></h2> <h2>放大10倍后的n值是:<span v-big="n"></span></h2> <

  • vue自定义封装指令以及实际使用

    目录 前言 封装指令基础 钩子函数 钩子函数参数 实际使用 复制指令(v-copy) 单击复制 双击复制 点击icon复制 handleClick 逻辑 完整代码 权限操作指令(v-hasPermi) 总结 前言 vue默认内置了v-model.v-if.v-show.v-html.v-text等指令,但是这些往往不足以满足我们实际项目开发中的场景,比如权限控制按钮.路由菜单,复制文字等功能,就需要我们自己自定义一些满足我们项目需求的指令了,那怎么封装自定义指令,并使用呢?我们先从封装指令的基础

  • Vue 非常实用的自定义指令分享

    目录 1.v-copy 2.v-longpress 3.v-debounce 4.v-emoji 5.v-LazyLoad 6.v-permission 7.vue-waterMarker 8.v-draggable 前言: Vue自定义指令有全局注册和局部注册两种方式.先来看看注册全局指令的方式,通过 Vue.directive( id, [definition] ) 方式注册全局指令.然后在入口文件中进行 Vue.use() 调用.在 Vue,除了核心功能默认内置的指令 ( v-model

  • Vue自定义加水波纹效果指令实例代码

    目录 前言 自定义指令 指令的作用 水波纹 水波纹效果 实现 原理 核心 代码实现 总结 前言 大家好,我是不吃鱼d猫,过年以来.断更许久,又回来了,学无止境,作为程序员知识是要不断更新迭代的.在此期间,接触了几天的Vue,确实好用,今天给大家说个好玩的,在做项目过程中,点击按钮,大家肯定会接触过很花的效果.接下来给大家说说水波纹效果. 自定义指令 指令的作用 言简意赅,就是操作底层dom 当然vue自身有非常强大的指令功能,代替你进行dom操作,比如v-on绑定事件对不对,这应该大家熟悉的指令

  • vue使用自定义指令实现按钮权限展示功能

    目录 一.在src下新建directive文件夹 二.定义index.js文件,在vue上注入自定义指令 三.编写自定义指令 四.使用 一.在src下新建directive文件夹 二.定义index.js文件,在vue上注入自定义指令 import hasBtn from './permission/hasBtn' const install = function (Vue) { Vue.directive('hasBtn', hasBtn) } if (window.Vue) { window

  • vue中的自定义指令clickOutside

    目录 自定义指令clickOutside 首先我们先看看vue官方的文档 clickoutside 这个指令用在哪里呢? 写法 自定义指令clickoutside使用及扩展用法 自定义指令clickOutside 这个指令通过vue的自定义指令的钩子函数实现. 首先我们先看看vue官方的文档 emmmm 看着好像有点困难,没关系官方文档也给出了例子. 现在应该就明白了不少了吧. clickoutside 这个指令用在哪里呢? 比如 写法 export default { bind (el, bi

  • 详解Vue中的自定义指令

    除了默认设置的核心指令( v-model 和 v-show ),Vue 也允许注册自定义指令.在Vue里,代码复用的主要形式和抽象是组件.然而,有的情况下,仍然需要对纯 DOM 元素进行底层操作,这时候就会用到自定义指令.本文将详细介绍Vue自定义指令 指令注册 以一个input元素自动获得焦点为例,当页面加载时,使用autofocus可以让元素将获得焦点 .但是autofocus在移动版Safari上不工作.现在注册一个使元素自动获取焦点的指令 指令注册类似于组件注册,包括全局指令和局部指令两

  • VUE中的自定义指令钩子函数讲解

    目录 自定义指令钩子函数 自定义指令 先上官方解释 小贴士 钩子函数运行顺序 自定义指令钩子函数 自定义指令 除了VUE 内置指令外,VUE也支持我们自定义注册指令,分为局部和全局注册 但这些想必大家都不陌生,其中官方API也是写的明明白白 官方API点这里 而且自定义指令也会极大程度上帮助我们日常的编程,但这是很有意思的事情出现了,就是钩子函数,很多老铁都弄不明白这五个函数的具体区别 先上官方解释 bind:只调用一次,指令第一次绑定到元素时调用.在这里可以进行一次性的初始化设置. inser

  • 详解在Vue中通过自定义指令获取dom元素

    vue.js 是数据绑定的框架,大部分情况下我们都不需要直接操作 DOM Element,但在某些时候,我们还是有获取DOM Element的需求的: 在 vue.js 中,获取某个DOM Element常用的方法是将这个元素改成一个组件 (component),然后通过 this.$el 去获取,但是在一些很小的项目里,在一些没有使用 webpack 等构建工具的项目中,创建一个组件并不是那么值得,所以 vue 提供了另一种操作DOM元素的方式,就是自定义指令 (directive) : 自定

  • vue.js通过自定义指令实现数据拉取更新的实现方法

    前言 这篇文章的代码片段位于 vue 的单文件组件中,即以 .vue 结尾的文件中,本文说明的只是一种实现方法,既不是唯一的方法也不是最好的方法,如果大家有更好的方法可以留言,大家进行讨论. 第一步 首先,一定要先定义变量: // app.vue <script> data () { return { // 定义 getData getData:{}, // 定义自定义指令的绑定值 ifUpdate:true } } 第二步 然后要使用 ajax 的话,要在 index.html 里引入 jq

  • vue 过滤器和自定义指令的使用

    过滤器 01. 是什么 过滤器可以对我们传入的数据进行必要的处理,并返回处理的结果 过滤器不会修改数据 过滤器的本质是函数 过滤器函数应该有参数,参数必须包含你想进行处理的源数据 过滤器应该有返回值,返回处理后的结果 export default { // 通过filters创建局部过滤器 filters:{ 过滤器名称(data){ // 对传入的data 进行处理 return 处理结果 } } } 02. 怎么做 (1)定义过滤器 局部过滤器:定义在组件内部,只能在当前组件内使用 通过fi

  • Vue 3.0自定义指令的使用入门

    提示:在阅读本文前,建议您先阅读 Vue 3 官方文档 自定义指令 章节的内容. 一.自定义指令 1.注册全局自定义指令 const app = Vue.createApp({}) // 注册一个全局自定义指令 v-focus app.directive('focus', {   // 当被绑定的元素挂载到 DOM 中时被调用   mounted(el) {     // 聚焦元素     el.focus()   } }) 2.使用全局自定义指令 <div id="app"&g

  • Vue.js directive自定义指令详解

    自定义一个demo指令 Vue自定义指令语法如下: Vue.directive(id, definition) 传入的两个参数,id是指指令ID,definition是指定义对象.其中,定义对象可以提供一些钩子函数. <div id="app"> <!-- input输入框获得焦点 --> <input type="text" v-focus/> </div> <script> // 注册一个全局自定义指令

  • 如何在Vue3中实现自定义指令(超详细!)

    目录 前言 生命周期 钩子的参数 简化形式 对象字面量 在组件上使用指令 几个实用的自定义指令 自动聚焦v-focus 防抖v-debounce 节流v-throttle 弹窗隐藏v-hide 总结 在开发Vue项目时,大多数人都会使用到Vue内置的一些指令,例如v-model.v-if等,在使用的时候不知道有没有想过自己也来实现一个指令呢.本文就以Vue3项目为基础,从原理.方法到实际案例.注意事项,尽可能细致的讲解如何自定义指令. 前言 我们需要明白为什么需要自定义一个指令,其实就是想更加简

  • 深入讲解AngularJS中的自定义指令的使用

    AngularJS的自定义指令,就是你自己的指令,加上编译器编译DOM时运行的原生核心函数.这可能很难理解.现在,假设我们想在应用中不同页面复用一些特定的代码,而又不复制代码.那么,我们就可以简单地把这段代码放到单独的文件,并调用使用自定义指令的代码,而不是一遍又一遍地敲下来.这样的代码更容易理解.AngularJS中有四种类型的自定义指令: 元素指令 属性指令 CSS class 指令 注释指令 在我们现有的app中实现他们之前,我们来看看自定义指令是个什么样子:   元素指令 在html中写

随机推荐