Vue.js事件修饰符理解测试

测试程序

<!doctype html >
< html >
< head >
< title >事件捕获顺序测试 </ title >
< meta charset= "utf-8" >
< style text= "txt/css" >
div{
border: 1px solid red;
padding: 20px;
}
< / style >
< script src= "vue/vue.js" > < / script >
</ head >
< body >
< div id= "xdd" >
< div v-on:click= "out(1)" >
onclick 输出1
< div v-on:click= "out(2)" >
onclick 输出2
< div v-on:click= "out(3)" >
onclick 输出3
< div v-on:click= "out(4)" >
onclick 输出4
(DOM0级事件)
</ div >
</ div >
</ div >
</ div >
</ div >
< script >
var app= new Vue({
el: "#xdd",
methods:{
out: function( n){
alert( n);
}
}
})
< / script >
</ body >
</ html >


测试1:初始状态下事件触发是冒泡模式下触发,点击div4输出:4 3 2 1;

测试2  .stop  :在div3上添加.v-on:click.stop="out(3)" 

结果:点击div3 只输出3  

          点击div4  输出4 3 

          所以.stop的作用为使事件冒泡到该处为止,不再向外层元素冒泡

测试3 .capture :在初始状态的程序div2上添加一个v-on:click.capture="out(2)"

结果:点击div2  输出 2 1

           点击div3  输出 2 3 1

          点击div4  输出 2 4 3 1

所以.capture会使事件在捕获阶段触发。

发现如果在div2上添加 v-on:click="out(5)",则会在冒泡阶段触发div2的事件,div2上发生两次事件


测试4:.self   div3上添加v-on:click="out(3)"

结果:  点击div3时 输出 3 2 1

            点击div4时 输出 4 2 1  没有触发div3的事件

所以.self能够使该元素的只能单击自己时触发事件,同时这种情况下自己也会加入冒泡;但是不会加入其内部元素触发的冒泡中


测试5:.once div3上添加v-on:click="out(3)"

结果:  单击div4 输出 4 3 2 1

            再次单击div4 输出 4 2 1

            单击div3 输出2 1 

所以 .once的作用使让该时间函数只会触发一次,不管是否是单击该元素触发还是在其他元素的冒泡阶段触发。 


猜你喜欢

转载自blog.csdn.net/xiongshiyuan/article/details/80042030