事件处理
监听事件
可以用v-on指令监听DOM事件
<div id="example-1">
<button v-on:click="counter += 1">Add</button>
</div>
var vm = new Vue({
el:"#example-1",
data:{
counter:0
}
})
事件处理方法
v-on可以接收一个需要调用的方法名称
<div id="example-2">
<button v-on:click="greet">greet</button>
</div>
var vm = new Vue({
el:"#example-2",
data:{
name:"Vue.js"
},
methods:{
greet:function(event){
alert("Hello" + this.name + "!");
if(event){
alert(event.target.tagName)
}
}
}
})
也可以用JavaScript直接调用
vm.greet();
内联处理器中的方法
除了直接绑定到一个方法,也可以在内联JavaScript语句中调用方法
<div id="example-3">
<button v-on:click="say('hi')">Say</button>
<button v-on:click="say('what')">what</button>
</div>
var vm = new Vue({
el:"#example-3",
data:{},
methods:{
say:function(message){
alert(message)
}
}
})
事件修饰符
在事件处理程序中调用 event.preventDefault() 或 event.stopPropagation() 是非常常见的需求。尽管我们可以在方法中轻松实现这点,但更好的方式是:方法只有纯粹的数据逻辑,而不是去处理 DOM 事件细节。
为了解决这个问题,Vue.js 为 v-on 提供了事件修饰符。之前提过,修饰符是由点开头的指令后缀来表示的。
.stop
.prevent
.capture
.self
.once
<!-- 阻止单击事件继续传播 -->
<a v-on:click.stop="doThis"></a>
<!--提交事件不再重载页面-->
<form v-on:click.stop.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>
使用修饰符时,顺序很重要;相应的代码会以同样的顺序产生。因此,用 @click.prevent.self 会阻止所有的点击,而 @click.self.prevent 只会阻止对元素自身的点击。
<!--点击事件将只会触发一次-->
<a v-on:click.once="doThis"></a>
按键修饰符
在监听键盘事件时,我们经常需要检查常见的键值。Vue 允许为 v-on 在监听键盘事件时添加按键修饰符,全部的按键别名
.enter
.tab
.delete
.esc
.space
.up
.down
.left
.right
系统修饰键
可以用如下修饰符来实现仅在按下相应按键时才触发鼠标或键盘事件的监听器。
.ctrl
.alt
.shift
.meta
.exact 修饰符允许你控制由精确的系统修饰符组合触发的事件。
#鼠标按钮修饰符
.left
.right
.middle