Vue.js 提供了事件处理机制,事件监听使用v-on指令监听DOM事件来触发JavaScript代码。
通常情况下需要编写监听事件、方法事件处理器、内联处理器方法。
监听事件
监听事件直接把事件写在v-on指令中
<div id="app">
<p>{{message}}</p>
<button @click="message=message+'.......YanH'">欢迎</button>
</div>
<script type="text/javascript">
var app1=new Vue({
el:"#app",
data:{
message:'welcome'
}
})
</script>
方法事件处理器
使 v-on 接收一个定义的方法来调用。
<div id="app">
<p>{{message}}</p>
<button @click="com">欢迎</button>
</div>
<script type="text/javascript">
var app1=new Vue({
el:"#app",
data:{
message:'welcome'
},
methods:{
com:function(){
alert("computer!");
}
}
})
</script>
内联事件处理器
如果需要传递参数,就需要内联JavaScript 语句。这种方式称为内联事件处理器。
<div id="app">
<button @click="one_say('welcome two')">欢迎</button>
<br />
<p>{{one}}</p>
<br/>
<p>{{two}}</p>
</div>
<script type="text/javascript">
var app1=new Vue({
el:"#app",
data:{
one:'',
two:''
},
methods:{
one_say:function(message){
app1.one=message;
},
two_say:function(message){
app1.two=message;
}
}
})
</script>
在内联语句处理器中可以用特殊的变量 $event 把它传入方法,以此来访问原生的 DOM 事件。
<button v-on:click="funName(vue,$enent)">点击</button>
......
var app1=new Vue({
el:"#app",
methods:{
funName:function(msg,event){
event.preventDefault();
}
}
})
事件修饰符
.stop
<!-- 阻止单击事件继续传播 -->
<a v-on:click.stop="doThis"></a>
.prevent
<!-- 提交事件不再重载页面 -->
<form v-on:submit.prevent="onSubmit"></form>
<!-- 修饰符可以串联 -->
<a v-on:click.stop.prevent="doThat"></a>
<!-- 只有修饰符 -->
<form v-on:submit.prevent></form>
.capture
<!-- 添加事件监听器时使用事件捕获模式 -->
<!-- 即内部元素触发的事件先在此处理,然后才交由内部元素进行处理 -->
<div v-on:click.capture="doThis">...</div>
.self
<!-- 只当在 event.target 是当前元素自身时触发处理函数 -->
<!-- 即事件不是从内部元素触发的 -->
<div v-on:click.self="doThat">...</div>
注意:
使用修饰符时,顺序很重要;相应的代码会以同样的顺序产生。因此,用 v-on:click.prevent.self会阻止所有的点击,而v-on:click.self.prevent 只会阻止对元素自身的点击。
.once
<!-- 点击事件将只会触发一次 -->
<a v-on:click.once="doThis"></a>
.passive
<!-- 滚动事件的默认行为 (即滚动行为) 将会立即触发 -->
<!-- 而不会等待 `onScroll` 完成 -->
<!-- 这其中包含 `event.preventDefault()` 的情况 -->
<div v-on:scroll.passive="onScroll">...</div>
注意:
不要把 .passive 和 .prevent 一起使用,因为 .prevent 将会被忽略,同时浏览器可能会向你展示一个警告。请记住,.passive 会告诉浏览器你不想阻止事件的默认行为。
按键修饰符
<!-- 只有在 `key` 是 `Enter` 时调用 `vm.submit()` -->
<input v-on:keyup.enter="submit">
<input v-on:keyup.page-down="onPageDown">
按键码
keyCode 的事件用法已经被废弃了并可能不会被最新的浏览器支持。
系统修饰键
在 Vue2.1.0 版本中增加一些修饰键。这些键实现仅在按下相应按键时才触发鼠标或键盘事件的监听器。修饰键如下:
-
.ctrl
-
.alt
-
.hift
-
.meta
注意:
在 Mac 系统键盘上,meta对应 command 键 (⌘)。在 Windows 系统键盘meta 对应 Windows 徽标键 (⊞)。在 Sun 操作系统键盘上,meta对应实心宝石键 (◆)。在其他特定键盘上,尤其在 MIT 和 Lisp 机器的键盘、以及其后继产品,比如 Knight 键盘、space-cadet 键盘,meta 被标记为“META”。在 Symbolics 键盘上,meta 被标记为“META”或者“Meta”。
.exact 修饰符
.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
vue.js官网文档:https://cn.vuejs.org/v2/guide/events.html