Vue事件修饰符

Posted 橘猫吃不胖~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue事件修饰符相关的知识,希望对你有一定的参考价值。

Vue事件修饰符

1 .prevent:阻止默认事件

.prevent可以阻止默认事件的发生。

例如,阻止a标签的跳转

<div id="app">
    <a href="https://www.baidu.com" @click.prevent>百度</a>
</div>
<script>
    var vm = new Vue(
        el: "#app"
    )
</script>

除此之外,还有一种方式是使用之前的e.preventDefault()来阻止默认行为,代码如下:

    <div id="app">
        <a href="https://www.baidu.com" @click="handleClick">百度</a>
    </div>
    <script>
        var vm = new Vue(
            el: "#app",
            methods: 
                handleClick(e) 
                    e.preventDefault();
                
            
        )
    </script>

这时点击页面上的标签则不会进行页面的跳转。

2 .stop阻止事件冒泡

DOM有事件冒泡的特点,使用.stop可以阻止事件冒泡,代码如下:

    <div id="app">
        <div @click="handleClick">
            <button @click.stop="handleClick">点击提示</button>
        </div>
    </div>
    <script>
        var vm = new Vue(
            el: "#app",
            methods: 
                handleClick(e) 
                    console.log("事件触发");
                
            
        )
    </script>

或者使用e.stopPropagation()也可以阻止事件冒泡,代码如下:

    <div id="app">
        <div @click="handleClick">
            <button @click="handleClick">点击提示</button>
        </div>
    </div>
    <script>
        var vm = new Vue(
            el: "#app",
            methods: 
                handleClick(e) 
                    e.stopPropagation(); // 阻止事件冒泡
                    console.log("事件触发");
                
            
        )
    </script>

3 .once事件只触发一次

.once可以让事件只触发一次,当再次触发事件事,该事件会失效。

例如,页面上有一个按钮,每次点击按钮都会弹窗提示

    <div id="app">
        <button @click="handleClick">点击</button>
    </div>
    <script>
        var vm = new Vue(
            el: "#app",
            methods: 
                handleClick() 
                    alert("点击事件");
                
            
        )
    </script>


如果为click事件加上事件修饰符.once,那么该弹窗只会出现一次,再次点击按钮则不会弹窗,示例代码如下:

    <div id="app">
        <button @click.once="handleClick">点击</button>
    </div>
    <script>
        var vm = new Vue(
            el: "#app",
            methods: 
                handleClick() 
                    alert("点击事件");
                
            
        )
    </script>

4 .capture使用事件捕获模式

在DOM事件流中,我们都知道DOM事件会先捕获然后冒泡,在冒泡阶段才会处理事件,因此在下面的示例中,点击按钮,会先触发handleClick2()输出2,然后触发handleClick1()输出1,代码如下:

    <div id="app">
        <div @click="handleClick1">
            <button @click="handleClick2">点击</button>
        </div>
    </div>
    <script>
        var vm = new Vue(
            el: "#app",
            methods: 
                handleClick1() 
                    console.log(1);
                ,
                handleClick2() 
                    console.log(2);
                
            
        )
    </script>


但是如果我们想在事件捕获时就处理事件,可以使用.capture来处理,这样点击按钮时,会先触发handleClick1()输出1,然后触发handleClick2()输出2,示例代码如下:

    <div id="app">
        <div @click.capture="handleClick1">
            <button @click="handleClick2">点击</button>
        </div>
    </div>
    <script>
        var vm = new Vue(
            el: "#app",
            methods: 
                handleClick1() 
                    console.log(1);
                ,
                handleClick2() 
                    console.log(2);
                
            
        )
    </script>

5 .self当e.target是当前操作的元素才触发事件

在冒泡或者捕获时,e.target会指向触发事件的对象。例如,在下面代码中,点击按钮,虽然由于事件冒泡会将上面div的事件也进行触发,但是它们的e.target都是触发事件的按钮。

    <div id="app">
        <div @click="handleClick">
            <button @click="handleClick">点击</button>
        </div>
    </div>
    <script>
        var vm = new Vue(
            el: "#app",
            methods: 
                handleClick(e) 
                    console.log(e.target);
                
            
        )
    </script>


当使用.self来修饰时,那么只有当触发事件的对象和当前操作的元素一致时,才会触发事件,代码如下:

    <div id="app">
        <div @click.self="handleClick">
            <button @click="handleClick">点击</button>
        </div>
    </div>
    <script>
        var vm = new Vue(
            el: "#app",
            methods: 
                handleClick(e) 
                    console.log(e.target);
                
            
        )
    </script>


在上面的代码中,点击按钮后只触发了一次handleClick()事件,这是因为外面的div并不是当前的e.target,因此不会触发handleClick()事件。

6 .passive:事件的默认行为立即执行

.passive可以让事件的默认行为立即执行,无需等待事件回调执行完毕,一般在移动端会使用多一些。

以上是关于Vue事件修饰符的主要内容,如果未能解决你的问题,请参考以下文章

Vue事件修饰符

java-2016-10-04

vue5 v-model详解,绑定事件,修饰符,深度响应式

vue中常用的事件和修饰符简单总结

java中类修饰符都有哪些?

c#类的修饰符都有哪些?