主题
事件绑定
v-on / @
@
是 v-on 的简写
vue
<template>
<button @click="handleClick"></button>
</template>
<script>
export default{
methods: {
handleClick: () => {
console.log('hello world')
}
}
}
</script>
点击 button 会打印 hello world
参数
模板中
不传参
,则函数只可以接受到一
个参数,event
vue<template> <button @click="handleClick"></button> </template> <script> export default{ methods: { handleClick: (e) => {} // 可以拿到e } } </script>
模板中
传参
,往括号中传$event
即在函数相应位置中接受到event
,还可同时传入其他参数
vue<template> <button @click="handleClick($event, 1, 2)"></button> </template> <script> export default{ methods: { handleClick: (e, one, two) => { console.log(e) // 可以打印出 e console.log(one) // 1 } } } </script>
修饰符
- 为事件添加
e.stopPropagation()
vue
<div @click.stop="fn"></div>
- 为事件添加
e.preventDefault()
vue
<div @click.prevent="fn"></div>
可串联
vue<div @click.stop.prevent="fn"></div>
可以只有修饰符,不添加事件
vue<div @click.prevent></div>
- 只有
e.target === e.currentTarget
时(触发元素是绑定元素)才触发
vue
<div @click.self="fn"></div>
- 只执行一次,执行完后解绑
vue
<div @click.once="fn"></div>
- 规定事件为捕获事件
vue
<div @click.capture="fn"></div>
- 按键修饰符
如按下
Enter
才执行- vue
<div @keydown.enter="fn"></div>
- enter 回车
- tab
- delete
- esc
- 系统修饰符
只有
按着系统修饰符并同时按下其他按钮
才执行- vue
<div @keydown.ctrl="fn"></div>
- ctrl
- alt
- shift
- 鼠标修饰符
按下鼠标对应键才执行
- vue
<div @click.left="fn"></div>
- left 左键
- right 右键
- middle 中间键
- 子组件修饰符
在子组件绑定的不是自定义事件(即要通过子组件$emit触发的事件),而是绑定原生事件
- vue
<Child @click.native="fn"></Child>