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使用Element实现增删改查+打包的步骤
Nov 25 Vue.js
vue使用element-ui实现表单验证
Dec 13 Vue.js
8个非常实用的Vue自定义指令
Dec 15 Vue.js
vue 数据操作相关总结
Dec 17 Vue.js
利用Vue实现简易播放器的完整代码
Dec 30 Vue.js
vue3自定义dialog、modal组件的方法
Jan 04 Vue.js
vue浏览器返回监听的具体步骤
Feb 03 Vue.js
一文带你理解vue创建一个后台管理系统流程(Vue+Element)
May 18 Vue.js
vue-cli4.5.x快速搭建项目
May 30 Vue.js
Vue自定义铃声提示音组件的实现
Jan 22 Vue.js
Vue的生命周期一起来看看
Feb 24 Vue.js
vue router 动态路由清除方式
May 25 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的FTP学习(二)
2006/10/09 PHP
PHP三元运算符的结合性介绍
2012/01/10 PHP
PHP图像裁剪缩略裁切类源码及使用方法
2016/01/07 PHP
深入解析PHP的Yii框架中的缓存功能
2016/03/29 PHP
文本链接逐个出现的js脚本
2007/12/12 Javascript
一些常用的JS功能函数代码
2009/06/23 Javascript
IE 条件注释详解总结(附实例代码)
2009/08/29 Javascript
Javascript下判断是否为闰年的Datetime包
2010/10/26 Javascript
Js 代码中,ajax请求地址后加随机数防止浏览器缓存的原因
2013/05/07 Javascript
关于jQuery中.attr()和.prop()的问题探讨
2013/09/06 Javascript
js获取input长度并根据页面宽度设置其大小及居中对齐
2014/08/22 Javascript
js简单正则验证汉字英文及下划线的方法
2016/11/28 Javascript
整理关于Bootstrap导航的慕课笔记
2017/03/29 Javascript
前端构建工具之gulp的语法教程
2017/06/12 Javascript
老生常谈ES6中的类
2017/07/31 Javascript
基于Vue、Vuex、Vue-router实现的购物商城(原生切换动画)效果
2018/01/09 Javascript
vue-router中的hash和history两种模式的区别
2018/07/17 Javascript
layui中使用jquery控制radio选中事件的示例代码
2018/08/15 jQuery
JS使用Prim算法和Kruskal算法实现最小生成树
2019/01/17 Javascript
vue分页器组件编写方法详解
2019/06/28 Javascript
vue实现滑动切换效果(仅在手机模式下可用)
2020/06/29 Javascript
Python ORM框架SQLAlchemy学习笔记之数据查询实例
2014/06/10 Python
Python中使用strip()方法删除字符串中空格的教程
2015/05/20 Python
Python正则表达式常用函数总结
2017/06/24 Python
分析python动态规划的递归、非递归实现
2018/03/04 Python
python如何为创建大量实例节省内存
2018/03/20 Python
利用python开发app实战的方法
2019/07/09 Python
python修改文件内容的3种方法详解
2019/11/15 Python
Python如何在循环内使用list.remove()
2020/06/01 Python
python3 kubernetes api的使用示例
2021/01/12 Python
Autopep8的使用(python自动编排工具)
2021/03/02 Python
英国团购网站:Groupon英国
2017/11/28 全球购物
YII2 全局异常处理深入讲解
2021/03/24 PHP
促销活动总结
2014/04/28 职场文书
党建目标管理责任书
2014/07/25 职场文书
中学教师教学工作总结
2015/08/13 职场文书