• 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 只触发一次事件处理函数



  • 相关阅读:
    Winform中如何禁用最大化或最小化按钮
    联想笔记本白屏解决办法
    SqlSever查询当前数据库某个表的名称、列名称、列说明
    离线安装Microsoft SQL Server 2016时Microsoft R Open和Microsoft R Server的问题
    SqlSever查询当前数据库的所有表名及其描述
    Windows10系统C盘的ESD文件夹是什么?可以删除吗?
    飞秋截图的快捷键是什么?
    打开Word时报错:Cannot find the Word document template:WordToRqm.dot
    .Net Core 2.1 上传文件后保存在根目录下的文件夹中,但是通过网页链接访问不了
    Winform弹出确认窗口
  • 原文地址:https://www.cnblogs.com/starwei/p/12485744.html
Copyright © 2020-2023  润新知