vue事件修饰符

我们用vue中的事件修饰符来做上一篇中event.preventDefault() 阻止事件的默认行为和event.stopPropagation() 阻止事件冒泡、传播事件。

<div id="app">
        <div @click="outer" id="outer">
            <div @click="middle" id="middle">
                <div @click="inner" id="inner">

                </div>
            </div>
        </div>
    </div>

<script>
        let vm = new Vue({
            el : "#app",
            data : {
                
            },
            methods: {
                 outer(){
                    console.log('outer点击事件触发了...');
                },
                middle(){
                    console.log('middle点击事件触发了...');
                },
                inner(){
                    console.log('inner点击事件触发了...');
                }
            }
        })
    </script>

当然我们也可以在method中阻止事件冒泡,如下:

                middle(){
                    console.log('middle点击事件触发了...');
                    event.stopPropagation();
                },

但是vue.js是鼓励尽量在函数里面写业务相关的代码,DOM操作的尽量少做。

这些可以作为.参数放入标签属性中,语法为:v-指令名:参数.修饰符="值",例如:

@click.stop="inner"   #在事件名后面添加stop时,vue解析的时候,会自动添加e.stopPropagation()
        <div @click="outer" id="outer">
            <div @click="middle" id="middle">
                <div @click.stop="inner" id="inner">

                </div>
            </div>
        </div>

事件流由冒泡变为捕获可以变成如下:

在事件后面添加.capture,vue解析的时候,会自动从事件冒泡变为事件捕获。

        <div @click.capture="outer" id="outer">
            <div @click.capture="middle" id="middle">
                <div @click.capture="inner" id="inner">

                </div>
            </div>
        </div>

 如果想阻止默认行为,比如说点击a标签的时候,不然其跳转,则可以使用prevent,vue解析的时候,会把prevent解析为preventDefault

<a href="http://www.baidu.com" @click.prevent="prev()">百度一下</a>  
加上@click.prevent后,就会不会跳转了

self修饰符:只有点击自己标签区域才会,触发事件,其他的标签是不会触发事件的

        <div @click="outer" id="outer">
            <div @click.self="middle" id="middle">
                <div @click="inner" id="inner">

                </div>
            </div>
        </div>

 

posted @ 2024-08-14 20:43  洛飞  阅读(53)  评论(0编辑  收藏  举报