修饰符
修饰符是vue功能的拓展,是对vue事件或者系统操作等等进行功能的补充。
看下面的案例
1 <div id="app"> 2 <div class="outer" @click="outer"> 3 <div class="center" @click="center"> 4 <div class="inner" @click="inner"> 5 6 </div> 7 </div> 8 </div> 9 </div> 10 <script src="./js/vue.js"></script> 11 <script> 12 var vue= new Vue({ 13 el:"#app", 14 methods: { 15 outer(){ 16 console.log("外层") 17 }, 18 center(){ 19 console.log("中间") 20 21 }, 22 inner(){ 23 console.log("内层") 24 25 }, 26 } 27 }) 28 </script>
在浏览器中我们点击绿色的方块,打开控制面板可以看到依次输出“内层,中间,外层”。
此时点击了inner,其实就相当于点击了center和outer,此时如果都绑定了事件监听,就势必都会被触发。
我们想要阻止这种事件冒泡,通过两种修饰符方法stop和self。
<1>stop修饰符
1 <div class="outer" @click="outer"> 2 <div class="center" @click="center"> 3 <div class="inner" @click.stop="inner"></div> 4 </div> 5 </div>
此时就回只弹出内层,阻止了时间冒泡,
stop修饰符的作用就是阻止事件的一个冒泡。
其作用类似原生JavaScript的event.stopPropagation()方法
1 inner(event) { 2 event.stopPropagation(); 3 console.log("内层") 4 }
<2>self修饰符
我们看下面的案例
1 <div class="outer" @click.self="outer"> 2 <div class="center" @click.self="center"> 3 <div class="inner" @click.self="inner"></div> 4 </div> 5 </div>
此时我们可以看到,点击谁,谁输出结果。
self修饰符的作用是只有点击元素本身的时候才能触发事件,不接受冒泡上来的事件,同时也不能阻止事件的冒泡。
此时我们再看
1 <div class="outer" @click="outer"> 2 <div class="center" @click.self="center"> 3 <div class="inner" @click.self="inner"></div> 4 </div> 5 </div>
当我们点击绿色的一层是会输出内层和外层,点击蓝色的一层输出中间和外层,所以,self修饰实际是不能阻止事件向上冒泡的。
prevent修饰符
如果一个超级链接,既有链接,又有事件,此时点击超级链接后会发生什么
我们看下面的一个案例
1 <div id="app"> 2 <a href="http://www.baidu.com" @click="alertDialog">百度</a> 3 </div> 4 <script src="./js/vue.js"></script> 5 <script> 6 var vue= new Vue({ 7 el:"#app", 8 methods: { 9 alertDialog(){ 10 alert("百度") 11 } 12 } 13 }) 14 </script>
此时我们点击可以看到先弹出对话框,在跳转到百度。
如果此时我们不需要跳转到百度,可以通过prevent修饰符进行阻止。此时只会弹出对话框,不会跳转到百度。
1 <a href="http://www.baidu.com" @click.prevent="alertDialog">点击跳转到百度</a>
prevent也有原生的事件方法
1 event.preventDefault();
capture修饰符
capture修饰符是对事件捕获的监听,vue的事件监听,默认都是获取冒泡阶段的,所以使用capture去监听捕获阶段的事件
1 <div class="outer" @click.capture="outer"> 2 <div class="center" @click.capture="center"> 3 <div class="inner" @click.capture="inner"> 4 5 </div> 6 </div> 7 </div>
我们会看到在浏览器中点击绿色盒子之后会先弹出“外层,中间,内层”
once修饰符
once修饰符的作用就是使事件只触发一次
我们看下面的一个案例
1 <div id="app"> 2 <p>{{a}}</p> 3 <button @click.once="add">按我加1</button> 4 5 </div> 6 <script src="./js/vue.js"></script> 7 <script> 8 var vue= new Vue({ 9 el:"#app", 10 data:{ 11 a:100 12 }, 13 methods: { 14 add(){ 15 this.a++ 16 console.log(this.a) 17 } 18 } 19 }) 20 </script>
此时我们在浏览器中点击,发现智能点击一次,继续点击便不会加一,data中的数据也不会加一。