Vue事件修饰符

2018-12-24  本文已影响0人  筱疯子

1· .stop 阻止冒泡

    <!-- 使用 .stop 阻止冒泡 -->
    <!-- 点击按钮 先触发btn的click事件 然后向上冒泡, 触发div的click事件  加上.stop阻止冒泡 只触发btn的 -->
    <div class="inner" @click="divHander"> 
        <input type="button" value="戳我" @click.stop="btnHander"/>
    </div>

2· .prevent 阻止默认行为

<!-- 使用 .prevent 阻止默认行为 -->
    <a href="https://www.baidu.com/" @click.prevent="linkClick">有问题,就去百度咯</a>

3· .capture 实现捕获触发事件机制

<!-- 使用 .capture 实现捕获触发事件机制 -->
    <!-- 点击按钮 先触发div的click事件 然后向下触发btn的事件 -->
    <div class="inner" @click.capture="divHander"> 
        <input type="button" value="戳我" @click="btnHander"/>
    </div>

4· .self 实现只有点击当前元素时候 , 才会触发事件处理函数

<!-- 使用 .self 实现只有点击当前元素时候 , 才会触发事件处理函数 -->
    <!-- 点各自触发各自的事件,不通过冒泡或捕获的方式触发别的元素的事件 -->
    <div class="inner" @click.self="divHander"> 
        <input type="button" value="戳我" @click="btnHander"/>
    </div>

5· .once 只触发一次事件处理函数

<!-- 使用 .once 只触发一次事件处理函数 -->
    <a href="https://www.baidu.com/" @click.prevent.once="linkClick">有问题,就去百度咯</a>
.stop 和 .self 的区别: .self只会阻止自己身上冒泡行为的触发,并不会真正阻止冒泡的行为(会一直向上冒泡)
完整代码如下:
<div id="app">
        <!-- 使用 .stop 阻止冒泡 -->
        <!-- 点击按钮 先触发btn的click事件 然后向上冒泡, 触发div的click事件  加上.stop阻止冒泡 只触发btn的 -->
        <div class="inner" @click="divHander"> 
            <input type="button" value="戳我" @click.stop="btnHander"/>
        </div>
        
        <!-- 使用 .prevent 阻止默认行为 -->
        <a href="https://www.baidu.com/" @click.prevent="linkClick">有问题,就去百度咯</a>
        
        <!-- 使用 .capture 实现捕获触发事件机制 -->
        <!-- 点击按钮 先触发div的click事件 然后向下触发btn的事件 -->
        <div class="inner" @click.capture="divHander"> 
            <input type="button" value="戳我" @click="btnHander"/>
        </div>
        
        <!-- 使用 .self 实现只有点击当前元素时候 , 才会触发事件处理函数 -->
        <!-- 点各自触发各自的事件,不通过冒泡或捕获的方式触发别的元素的事件 -->
        <div class="inner" @click.self="divHander"> 
            <input type="button" value="戳我" @click="btnHander"/>
        </div>
        
        <!-- 使用 .once 只触发一次事件处理函数 -->
        <a href="https://www.baidu.com/" @click.prevent.once="linkClick">有问题,就去百度咯</a>
    </div>
    <script type="text/javascript"> 
        var vm= new Vue({
            el:'#app',
            data:{},
            methods:{
                divHander() {
                    console.log('触发了 div 的点击事件')
                },
                btnHander() {
                    console.log('触发了 Btn 的点击事件')
                },
                linkClick() {
                    console.log('触发了 a链接 的点击事件')
                }
            }
        })
    </script>
上一篇 下一篇

猜你喜欢

热点阅读