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 相关文章推荐
快速解决vue2+vue-cli3项目ie兼容的问题
Nov 17 Vue.js
深入了解Vue3模板编译原理
Nov 19 Vue.js
vue自定义插件封装,实现简易的elementUi的Message和MessageBox的示例
Nov 20 Vue.js
Vue项目如何引入bootstrap、elementUI、echarts
Nov 26 Vue.js
详解Vue 的异常处理机制
Nov 30 Vue.js
vue+element table表格实现动态列筛选的示例代码
Jan 14 Vue.js
Vue 事件的$event参数=事件的值案例
Jan 29 Vue.js
Vue如何实现变量表达式选择器
Feb 18 Vue.js
vue实现拖拽进度条
Mar 01 Vue.js
Vue Element-ui表单校验规则实现
Jul 09 Vue.js
vue使用refs获取嵌套组件中的值过程
Mar 31 Vue.js
如何vue使用el-table遍历循环表头和表体数据
Apr 26 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
PHP获取QQ达人QQ信息的方法
2015/03/05 PHP
php实现的单一入口应用程序实例分析
2015/09/23 PHP
Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作
2017/06/30 PHP
PHP连接MySQL数据库并以json格式输出
2018/05/21 PHP
学习ExtJS Panel常用方法
2009/10/07 Javascript
Jquery插件之打造自定义的select标签
2011/11/30 Javascript
js改变文章字体大小的实例代码
2013/11/27 Javascript
jQuery中选择器小问题(新人难免遇到)
2014/03/31 Javascript
JavaScript使用push方法添加一个元素到数组末尾用法实例
2015/04/06 Javascript
JavaScript+CSS实现仿Mootools竖排弹性动画菜单效果
2015/10/14 Javascript
你不需要jQuery(三) 新AJAX方法fetch()
2016/06/14 Javascript
简单理解vue中el、template、replace元素
2016/10/27 Javascript
js中document.referrer实现移动端返回上一页
2017/02/22 Javascript
js实现把时间戳转换为yyyy-MM-dd hh:mm 格式(es6语法)
2017/12/28 Javascript
使用vue-router beforEach实现判断用户登录跳转路由筛选功能
2018/06/25 Javascript
微信小程序利用云函数获取手机号码
2019/12/17 Javascript
easyUI使用分页过滤器对数据进行分页操作实例分析
2020/06/01 Javascript
[40:27]完美世界DOTA2联赛PWL S3 PXG vs GXR 第一场 12.19
2020/12/24 DOTA
python在windows下实现ping操作并接收返回信息的方法
2015/03/20 Python
python通过Windows下远程控制Linux系统
2018/06/20 Python
使用Flask集成bootstrap的方法
2018/07/24 Python
js实现移动端H5页面手指滑动刻度尺功能
2017/11/16 HTML / CSS
Html5实现iPhone开机界面示例代码
2013/06/30 HTML / CSS
mysql的最长数据库名,表名,字段名可以是多长
2014/04/21 面试题
计算机应用职专应届生求职信
2013/11/12 职场文书
监察建议书范文
2014/03/12 职场文书
入股协议书范本
2014/04/14 职场文书
2014年学生会工作总结范文
2014/11/07 职场文书
班主任高考寄语
2015/02/26 职场文书
2015年乡镇环保工作总结
2015/04/22 职场文书
2015年保卫科工作总结
2015/05/14 职场文书
车辆管理制度范本
2015/08/05 职场文书
如何用Navicat操作MySQL
2021/05/12 MySQL
PyTorch 如何自动计算梯度
2021/05/23 Python
一文了解MySQL二级索引的查询过程
2022/02/24 MySQL
关于k8s环境部署mysql主从的问题
2022/03/13 MySQL