事件绑定: v-on:click
事件不传参:v-on:click="fn"
事件传参:v-on:click="fn(arg,$event)"
v-on也可以写成@click
<div id="root"> <h1 v-on:click="showInfo">{{text1}}</h1> <h1 v-on:click="showInfo2(66,$event)">{{text2}}</h1> </div> <script type="text/javascript"> const vm = new Vue({ el:"#root", data:{ text1:'点击事件不传参', text2:'点击事件传参带event' }, methods:{ showInfo(event){ console.log(event); }, showInfo2(num,e){ console.log(num,e); }, } })
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <script src="../lib/vue.js"></script> <style> .page { display: flex; flex-direction: column; gap: 20px 0; } .page .vertical-box { display: flex; flex-direction: column; } .outer { background: lightcoral; height: 50px; } .inner { background: lightseagreen; height: 30px; } .scroll-box { height: 100px; width: 200px; overflow: scroll; background: lightsalmon; } .scroll-box .inner { background: lightskyblue; height: 500px; width: 50px; } </style> <body> <!-- - prevent 阻止默认事件 - stop 阻止事件冒泡 - once 事件只触发一次 - capture 事件捕获 - self event.target是当前操作的元素才触发 - passive 事件的默认行为立即执行,无需等待事件回调函数执行完毕。 也就是说,事件在浏览器上的效果立刻出来,而不用等待回调函数执行完毕再出来。并不是所有事件都是先等回调函数先执行完(比如scroll就不需要等待,而wheel需要),一般移动端用得多。 --> <div id="root" class="page"> <!-- prevent 阻止默认事件 --> <div class="vertical-box"> <a href="//baidu.com">点我跳转</a> <a @click.prevent="showInfo" href="//baidu.com">点我跳转(阻止默认事件)</a> </div> <!-- stop 阻止事件冒泡 --> <div class="vertical-box outer" @click="outerHandler"> 阻止事件冒泡-外层 <span class="inner" @click.stop="innerHandler">阻止事件冒泡-内层</span> </div> <!-- 事件只触发一次 --> <div class="vertical-box" @click.once="outerHandler"> 我只触发一次 </div> <!-- 事件捕获 --> <div class="vertical-box outer" @click.capture="outerHandler"> 事件捕获-外层 <span class="inner" @click="innerHandler">事件捕获-内层</span> </div> <!-- self event.target是当前操作的元素才触发 --> <div class="vertical-box outer" @click.self="outerHandler"> self-外层 <span class="inner" @click="innerHandler">self-内层</span> </div> <!-- passive 事件默认行为立即执行,不用等待回调函数执行完毕 --> <div class="scroll-box" @wheel.passive="showInfo"> <div class="inner">inner</div> </div> </div> <script type="text/javascript"> const vm = new Vue({ el: "#root", data: { text1: '点击事件不传参', text2: '点击事件传参带event' }, methods: { showInfo(event) { console.log('show info run ~~~') // passive wheel // Array(100).fill().forEach(v => console.log('event handler')) }, outerHandler() { console.log('外层点击事件触发了') }, innerHandler() { console.log('内层点击事件触发了') } } }) </script> </body> </html>
Vue中常用的事件别名
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <script src="../lib/vue.js"></script> <body> <!-- Vue中常用的事件别名 - enter 回车 - delete 删除 - 退出 esc - 空格 space - 换行 tab - 上、下、左、右 up、down、left、right --> <div id="root" > <input type="text" placeholder="按回车获取提示" @keyup.delete="showInfo" > </div> <script type="text/javascript"> Vue.config.productionTip = false // 组织vue在启动时自动生成提示 const vm = new Vue({ el: "#root", data: {}, methods: { showInfo(event) { console.log(event.keyCode) } } }) </script> </body> </html>