vue修饰符.capture和.self的区别


Posted in Vue.js onApril 22, 2022

.capture和.self区分

capture和self主要是函数执行顺序的问题

.capture先执行父级的函数,再执行子级的触发函数(一般用法),

即是给元素添加一个监听器,当元素发生冒泡时,先触发带有该修饰符的元素。若有多个该修饰符,则由外而内触发。

<div v-on:click.capture='alert("1")' style="width: 100%;height: 45px;background-color: black;">
            <div v-on:click="alert('2')" style='width: 80%;margin-left: 10%;background-color: white;'>
                123
            </div>
        </div>

此时点击子级的div时,会先执行alert(‘1’),再执行alert(‘2’)

self是只执行子级本身的函数

<div v-on:click.self='alert("1")' style="width: 100%;height: 45px;background-color: black;">
            <div v-on:click="alert('2')" style='width: 80%;margin-left: 10%;background-color: white;'>
                123
            </div>
        </div>

此时点击子级的div会执行alert(‘2’),不会执行alert(‘1’)

修饰符capture和self

capture

.capture事件修饰符的作用添加事件侦听器时使用事件捕获模式

即是给元素添加一个监听器,当元素发生冒泡时,先触发带有该修饰符的元素。若有多个该修饰符,则由外而内触发。

就是谁有该事件修饰符,就先触发谁。(捕获阶段触发,从外向内,没有capture修饰符的,从内向外冒泡触发)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>.capture事件修饰符</title>
    <style type="text/css">
        * {
            margin: 0 auto;
            text-align: center;
            line-height: 40px;
        }
        div {
            width: 100px;
        }
        #obj1 {
            background: deeppink;
        }
        #obj2 {
            background: pink;
        }
        #obj3 {
            background: hotpink;
        }
        #obj4 {
            background: #ff4225;
        }
    </style>
    <script src="https://cdn.bootcss.com/vue/2.4.2/vue.min.js"></script>
</head>
<body>
<div id="content">
    <div id="obj1" v-on:click.capture="doc(event)">
        obj1
        <div id="obj2" v-on:click.capture="doc(event)">
            obj2
            <div id="obj3" v-on:click="doc(event)">
                obj3
                <div id="obj4" v-on:click="doc(event)">
                    obj4
                    <!--。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。点击obj4的时候,弹出的顺序为:obj1、obj2、obj4、obj3;
                    由于1,2有修饰符,故而先触发事件,然后就是4本身触发,最后冒泡事件。
                    -->
                </div>
            </div>
        </div>
    </div>
</div>
<script type="text/javascript">
    var content = new Vue({
        el: "#content",
        data: {
            id: ''
        },
        methods: {
            doc(event) {
                this.id = event.currentTarget.id;
                alert(this.id)
            }
        }
    })
</script>
</body>
</html>

self

只当事件是从侦听器绑定的元素本身触发时才触发回调

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>.capture事件修饰符</title>
    <style type="text/css">
        * {
            margin: 0 auto;
            text-align: center;
            line-height: 40px;
        }
        div{
            width:200px;
        }
    </style>
    <script src="https://cdn.bootcss.com/vue/2.4.2/vue.min.js"></script>
</head>
<body>
<div id="app">
   <div class="box1"  style="background: red;" @click.self="test1">
       box1
       <div class="box2" style="background: yellow;">
           box2
<!--box3点击触发test3不会触发test1,如果去除self修饰符就会触发,也就是说加了self元素的事件,只有自身触发才会执行回调,不执行冒泡过来的事件-->
           <div class="box3" style="background: pink;" @click.self="test3">box3</div>
       </div>
   </div>
</div>
<script type="text/javascript">
new Vue({
    el:'#app',
    data:{
    },
    methods:{
      test1(){
          console.log('box1');
      } ,
        test3(){
          console.log('box3');
        }
    }
})
</script>
</body>
</html>

Tags in this post...

Vue.js 相关文章推荐
解决vue elementUI 使用el-select 时 change事件的触发问题
Nov 17 Vue.js
详解vue 组件注册
Nov 20 Vue.js
解决vue页面刷新,数据丢失的问题
Nov 24 Vue.js
Vue实现图书管理小案例
Dec 03 Vue.js
vue使用echarts图表自适应的几种解决方案
Dec 04 Vue.js
vue 使用rules对表单字段进行校验的步骤
Dec 25 Vue.js
Vue通过懒加载提升页面响应速度
May 10 Vue.js
Vue实现动态查询规则生成组件
May 27 Vue.js
vue组件冲突之引用另一个组件出现组件不显示的问题
Apr 13 Vue.js
vue项目proxyTable配置和部署服务器
Apr 14 Vue.js
vue 自定义组件添加原生事件
Apr 21 Vue.js
解决vue自定义组件@click点击失效问题
Apr 30 Vue.js
vue 自定义组件添加原生事件
Apr 21 #Vue.js
vue 自定义的组件绑定点击事件
Apr 21 #Vue.js
vue组件vue-esign实现电子签名
Apr 21 #Vue.js
vue动态绑定style样式
Apr 20 #Vue.js
Vue OpenLayer测距功能的实现
vue 给数组添加新对象并赋值
Apr 20 #Vue.js
vue 数字翻牌器动态加载数据
Apr 20 #Vue.js
You might like
MySQL数据源表结构图示
2008/06/05 PHP
使用PHPMailer实现邮件发送代码分享
2014/10/23 PHP
golang、python、php、c++、c、java、Nodejs性能对比
2017/03/12 NodeJs
PHP压缩图片功能的介绍
2019/03/21 PHP
php使用自带dom扩展进行元素匹配的原理解析
2020/05/29 PHP
Javascript 八进制转义字符(8进制)
2011/04/08 Javascript
javascript正则表达式之search()用法实例
2015/01/19 Javascript
常常会用到的截取字符串substr()、substring()、slice()方法详解
2015/12/16 Javascript
浅析jquery与checkbox的checked属性的问题
2016/04/27 Javascript
JS随机打乱数组的方法小结
2016/06/22 Javascript
JavaScript性能优化总结之加载与执行
2016/08/11 Javascript
微信小程序 教程之数据绑定
2016/10/18 Javascript
underscore之function_动力节点Java学院整理
2017/07/11 Javascript
tracking.js页面人脸识别插件使用方法
2020/04/16 Javascript
微信小程序图表插件wx-charts用法实例详解
2019/05/20 Javascript
微信小程序8种数据通信的方式小结
2020/02/03 Javascript
Python实现简单的代理服务器
2015/07/25 Python
浅谈Python2、Python3相对路径、绝对路径导入方法
2018/06/22 Python
对matplotlib改变colorbar位置和方向的方法详解
2018/12/13 Python
python中@contextmanager实例用法
2021/02/07 Python
使用Html5多媒体实现微信语音功能
2019/07/26 HTML / CSS
英国Zoro工具:手动工具,电动工具和个人防护用品
2016/11/02 全球购物
中国网上药店领导者:1药网
2017/02/16 全球购物
莱德杯高尔夫欧洲官方商店:Ryder Cup Shop
2019/08/14 全球购物
Sandro法国官网:法国成衣品牌
2019/08/28 全球购物
请说出你所知道的线程同步的方法
2013/04/19 面试题
公司司机岗位职责
2014/02/07 职场文书
体育活动总结范文
2014/05/04 职场文书
群众路线自我剖析材料
2014/10/08 职场文书
2015年度员工自我评价范文
2015/03/11 职场文书
出生证明范本
2015/06/15 职场文书
音乐研修感悟
2015/11/18 职场文书
小学秋季运动会通讯稿
2015/11/25 职场文书
Oracle创建只读账号的详细步骤
2021/06/07 Oracle
Python多个MP4合成视频的实现方法
2021/07/16 Python
VUE解决跨域问题Access to XMLHttpRequest at
2022/05/06 Vue.js