主题
事件绑定
v-on / @
@ 是 v-on 的简写
vue
<template>
<button @click="handleClick"></button>
</template>
<script>
export default{
methods: {
handleClick: () => {
console.log('hello world')
}
}
}
</script>点击 button 会打印 hello world
参数
模板中
不传参,则函数只可以接受到一个参数,eventvue<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>
