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如何循环提取对象数组中的值
Nov 18 Vue.js
一篇超完整的Vue新手入门指导教程
Nov 18 Vue.js
Vue在H5 项目中使用融云进行实时个人单聊通讯
Dec 14 Vue.js
8个非常实用的Vue自定义指令
Dec 15 Vue.js
vue 导航守卫和axios拦截器有哪些区别
Dec 19 Vue.js
vue监听滚动事件的方法
Dec 21 Vue.js
vue-cli4.0多环境配置变量与模式详解
Dec 30 Vue.js
vue 实现click同时传入事件对象和自定义参数
Jan 29 Vue.js
浅谈Vue的computed计算属性
Mar 21 Vue.js
vue 把二维或多维数组转一维数组
Apr 24 Vue.js
vue递归实现树形组件
Jul 15 Vue.js
Vue3实现简易音乐播放器组件
Aug 14 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
ftp类(myftp.php)
2006/10/09 PHP
神盾加密解密教程(一)PHP变量可用字符
2014/05/28 PHP
详解WordPress中添加和执行动作的函数使用方法
2015/12/29 PHP
php curl简单采集图片生成base64编码(并附curl函数参数说明)
2019/02/15 PHP
在laravel中使用with实现动态添加where条件
2019/10/10 PHP
javascript 在网页中的运用(asp.net)
2009/11/23 Javascript
前淘宝前端开发工程师阿当的PPT中有JS技术理念问题
2010/01/15 Javascript
jquery动态增加删除表格行的小例子
2013/11/14 Javascript
兼容所有浏览器的js复制插件Zero使用介绍
2014/03/19 Javascript
jquery控制表单输入框显示默认值的方法
2015/05/22 Javascript
JavaScript中Date.toSource()方法的使用教程
2015/06/12 Javascript
基于jquery实现在线选座订座之影院篇
2015/08/24 Javascript
AngularJS基础 ng-keypress 指令简单示例
2016/08/02 Javascript
jQuery动态改变多行文本框高度的方法
2016/09/07 Javascript
Android中Okhttp3实现上传多张图片同时传递参数
2017/02/18 Javascript
深入理解Vue router的部分高级用法
2018/08/15 Javascript
CSS3 动画卡顿性能优化的完美解决方案
2018/09/20 Javascript
jQuery实现带3D切割效果的轮播图功能示例【附源码下载】
2019/04/04 jQuery
使用 Vue cli 3.0 构建自定义组件库的方法
2019/04/30 Javascript
angular8和ngrx8结合使用的步骤介绍
2019/12/01 Javascript
支付宝小程序实现省市区三级联动
2020/06/21 Javascript
[47:48]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第三局
2016/02/28 DOTA
用matplotlib画等高线图详解
2017/12/14 Python
python如何去除字符串中不想要的字符
2020/07/05 Python
matplotlib 纵坐标轴显示数据值的实例
2018/05/25 Python
3个用于数据科学的顶级Python库
2018/09/29 Python
使用TFRecord存取多个数据案例
2020/02/17 Python
关于canvas绘制模糊问题的解决方法
2019/09/24 HTML / CSS
移动端html5判断是否滚动到底部并且下拉加载
2019/11/19 HTML / CSS
详解HTML5.2版本带来的修改
2020/05/06 HTML / CSS
nohup的用法
2012/11/26 面试题
餐饮业创业计划书范文
2014/01/06 职场文书
给物业的表扬信
2014/01/21 职场文书
导游词之秦皇岛燕塞湖
2020/01/03 职场文书
详解Python+OpenCV进行基础的图像操作
2022/02/15 Python
TS 类型兼容教程示例详解
2022/09/23 Javascript