Vue知识点:事件修饰符

- prevent 阻止默认事件
类似于e.preventDefault();

- stop 阻止事件冒泡
类似于e.stopPropagation();

<div class="box1" @click="showMsg">
     <a href="http://www.baidu.com" @click.stop.prevent="showMsg">点击提示</a>
</div>

showMsg() {
  alert('你好,明天')
}
结果:
因为阻止了默认行为和冒泡,只调用a标签上的click事件,所以只有一个弹出框,不会跳转。
结论:
事件修饰符可以连用,顺序根据需求调整,效果一样。

- once 事件只触发一次

- capture 使用事件的捕获模式

<div class="box1" @click.capture="showMsg(1)">
     box1
     <div class="box2" @click="showMsg(2)">box2</div>
</div>

showMsg(msg) {
   consoloe.log(msg)
}

结论:
点击box2的时候结果是:21
使用capture后结果是:12

- self 只有event.target是当前操作的元素时才触发事件

<div class="box1" @click.self="showMsg">
     <button @click="showMsg">点击提示</button>
</div>

showMsg() {
   alert('111111111')
}

结论:
没有加self之前event.target操作的元素是button,触发的事件是button上的showMsg方法,
加上self之后event.target操作的元素是box1这个div,触发的事件是box1上的showMsg方法。

- passive 事件的默认行为立即执行,无需等待事件回调执行完毕

<ul @wheel="demo" class="list">
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
</ul>

demo(){
   for(let i=0; i<1000;i++){
       console.log(#,1)
   }
   console.log(‘滚不动了’,2)
}

结论:
没有加passive之前,会先执行demo方法里的for循环语句,等到for循环结束后才会执行wheel的滚动条默认行为,
加上passive之后,会先执行wheel的默认行为,即滚动条先滚动,后执行for循环

注:passive大部分情况用于移动端项目中比较多
Logo

前往低代码交流专区

更多推荐