事件绑定v-on
1.直接在指令中写JavaScript代码
<div id="example-1"> <button v-on:click="counter += 1">Add 1</button> <p>The button above has been clicked {{ counter }} times.</p> </div> <!-- js --> <script> var example1 = new Vue({ el: '#example-1', data: { counter: 0 } }) </script>
2.在指令中调用方法 在methods中自定义方法
<div id="example-2"> <!-- `greet` 是在下面定义的方法名 --> <button v-on:click="greet">Greet</button> </div> <script> var example2 = new Vue({ el: '#example-2', data: { name: 'Vue.js' }, // 在 `methods` 对象中定义方法 methods: { greet: function (event) { // `this` 在方法里指向当前 Vue 实例 alert('Hello ' + this.name + '!') // `event` 是原生 DOM 事件 if (event) { alert(event.target.tagName) } } } }) </script>
可以在方法中传入参数,也可以访问原始的DOM事件,用$event把它传入
<div id="example-3"> <button v-on:click="say('hi')">Say hi</button> <button v-on:click="say('what')">Say what</button> </div> <script> new Vue({ el: '#example-3', methods: { say: function (message) { alert(message) } } }) </script>
<button v-on:click="warn('Form cannot be submitted yet.', $event)"> Submit </button> <script> // ... methods: { warn: function (message, event) { // 现在我们可以访问原生事件对象 if (event) event.preventDefault() alert(message) } } </script>
3.事件修饰符
- .stop
- .prevent
- .capture
- .self
- .once
- .passive
使用修饰符时会有顺序问题。v-on:click.prevent.self会阻止所有的点击;v-on:click.self.prevent只会阻止对元素自身的点击。
<!-- 阻止单击事件继续传播 --> <a v-on:click.stop="doThis"></a> <!-- 提交事件不再重载页面 --> <form v-on:submit.prevent="onSubmit"></form> <!-- 修饰符可以串联 --> <a v-on:click.stop.prevent="doThat"></a> <!-- 只有修饰符 --> <form v-on:submit.prevent></form> <!-- 添加事件监听器时使用事件捕获模式 --> <!-- 即元素自身触发的事件先在此处理,然后才交由内部元素进行处理 --> <div v-on:click.capture="doThis">...</div> <!-- 只当在 event.target 是当前元素自身时触发处理函数 --> <!-- 即事件不是从内部元素触发的 --> <div v-on:click.self="doThat">...</div> <!-- 点击事件将只会触发一次 --> <a v-on:click.once="doThis"></a>
.passive能够提升移动端的性能。.passive不能和.prevent一起用,.passive不会阻止浏览器的默认行为。
<!-- 滚动事件的默认行为 (即滚动行为) 将会立即触发 --> <!-- 而不会等待 `onScroll` 完成 --> <!-- 这其中包含 `event.preventDefault()` 的情况 --> <div v-on:scroll.passive="onScroll">...</div>
4.按键修饰符
- .enter
- .tab
- .delete 捕获删除和退格
- .esc
- .space
- .up
- .down
- .left
- .right
系统修饰符 可以用来实现仅在按下相应按键时才触发鼠标或键盘事件
- .ctrl
- .alt
- .shift
- .meta
.exact修饰符允许你控制由精确的系统修饰符组合触发的事件
<!-- 即使 Alt 或 Shift 被一同按下时也会触发 --> <button @click.ctrl="onClick">A</button> <!-- 有且只有 Ctrl 被按下的时候才触发 --> <button @click.ctrl.exact="onCtrlClick">A</button> <!-- 没有任何系统修饰符被按下的时候才触发 --> <button @click.exact="onClick">A</button>
鼠标按钮修饰符
- .left
- .right
- .middle
参考地址:https://cn.vuejs.org/v2/guide/events.html