vue事件修饰符

一、阻止冒泡事件修饰符

什么是冒泡事件?在div嵌套的条件下,给所有div同时绑定click事件,点击最里面的div事件会一层一层由内向外触发父div的事件。事件从最里层的后代div逐层传出,这部分我们叫冒泡过程。

如何阻止事件冒泡,在vue修饰符中有一个指令为“ .stop” ,为内层的div绑定该指令,则可以解决冒泡事件。代码如下:

@click.stop="btnclick"
<body>
    <div class="inner" @click="divclick" >
        <input type="button" value="点击"  @click.stop="btnclick">
    </div>
</body>
</html>
<script src="vue-2.4.0.js"></script>
<script>
   var vm = new Vue({
        el:".inner",
        data:{
            msg:'触发了事件input',
            msg1:'触发了事件div'
        },
        methods:{
            btnclick(){  //  该方法 等同于btnclick:function(){ },简写省略了其中的 :function
                console.log(this.msg);
            },
            divclick(){  
                console.log(this.msg1);
            }
        }


   })

  冒泡事件的应用场景:

   我们在使用中多数情况下只使用冒泡监听。例如一条购物车信息,在这条信息中,右下角有一个删除按钮。点击这条消息可查看详情,点击删除按钮可将此商品移除。我们会分别给信息的div和删除button添加一个冒泡的click事件监听。如果不做阻止传递,点击删除button后,会显示商品详情。显然这不是我们想看到的。这时我们给button一个阻止事件传递的功能,点击删除按钮后,事件就会结束,就不再显示商品详情。

二、阻止默认行为修饰符 .prevent

当有链接的时候,链接会自动跳转,而prevent则是阻止链接的自动跳转,只触发当前事件。

<body>
    <div class="inner" @click="divclick" >
       <!-- 使用 .prevent 阻止默认行为 -->
    <a href="http://www.baidu.com" @click.prevent="linkClick">有问题,先去百度</a>
    </div>
</body>
</html>
<script src="vue-2.4.0.js"></script>
<script>
   var vm = new Vue({
        el:".inner",
        data:{ },
        methods:{
            linkClick() {
             console.log('触发了点击事件')
            }
        }


   })

</script>

三、实现捕获触发事件的机制 .capture

当有两个div时,点击内层的触发事件,让其先获取外层的触发事件,再触发本身的div。

 <!-- 使用  .capture 实现捕获触发事件的机制 -->
    <!-- <div class="inner" @click.capture="div1Handler">
      <input type="button" value="戳他" @click="btnHandler">
    </div> -->


<script>
    // 创建 Vue 实例,得到 ViewModel
    var vm = new Vue({
      el: '#app',
      data: {},
      methods: {
        div1Handler() {
          console.log('这是触发了 inner div 的点击事件')
        },
        btnHandler() {
          console.log('这是触发了 btn 按钮 的点击事件')
        }
      }
    });
  </script>

四、实现自身触发  .self

只有点击当前元素时候,才会触发事件处理函数.。

.self只会阻止自己身上冒泡行为的触发,并不会真正阻止 冒泡的行为 

<div class="inner" @click.self="div1Handler">
      <input type="button" value="戳他" @click="btnHandler">
 </div> 


<script>
    // 创建 Vue 实例,得到 ViewModel
    var vm = new Vue({
      el: '#app',
      data: {},
      methods: {
        div1Handler() {
          console.log('这是触发了 inner div 的点击事件')
        },
        btnHandler() {
          console.log('这是触发了 btn 按钮 的点击事件')
        }
      }
    });

五、 使用 .once 只触发一次事件处理函数



posted @ 2020-03-13 12:38  苏小妞吖  阅读(159)  评论(0编辑  收藏  举报