Vue v-on 指令
就像普通 JavaScript 中的事件处理一样,Vue 告诉浏览器:
- 要监听的事件('click', 'keydown', 'mouseover' 等)
- 事件发生时该怎么办
使用 v-on 的实例
让我们看一些例子,看看 v-on 如何与不同的事件和不同的代码一起使用,以便在这些事件发生时运行。
注意:要在事件发生时运行更高级的代码,我们需要引入 Vue 方法。在本教程的下一页了解 Vue 方法。
onclick 事件
v-on 指令允许我们根据指定的事件执行操作。
单击元素时,使用 v-on:click 执行操作。
实例
v-on 指令用于 <button> 标记以监听 "click" 事件。当 "click" 事件发生时,"lightOn" 数据属性在 true 和 false 之间切换,使灯泡后面的黄色 <div> 可见/隐藏。
<div id="app"><div id="lightDiv"><div v-show="lightOn"></div><img src="img_lightBulb.svg"></div><button v-on:click="lightOn = !lightOn">Switch light</button></div><script src="https://unpkg.com/vue@3/dist/vue.global.js"></script><script>const app = Vue.createApp({data() {return {lightOn: false}}})app.mount('#app')</script>
oninput 事件
使用 v-on:input 在元素获得输入时执行操作,就像在文本字段中击键一样。
实例
计算输入文本字段的点击次数:
<div id="app"><input v-on:input="inpCount++"><p>{{ 'Input events occured: ' + inpCount }}</p></div><script src="https://unpkg.com/vue@3/dist/vue.global.js"></script><script>const app = Vue.createApp({data() {return {inpCount: 0}}})app.mount('#app')</script>
mousemove 事件
当鼠标指针在元素上移动时,使用 v-on:mousemove 执行操作。
实例
每当鼠标指针在 <div> 元素上移动时,更改该元素的背景色:
<div id="app"><p>Move the mouse pointer over the box below</p><div v-on:mousemove="colorVal=Math.floor(Math.random()*360)"v-bind:style="{backgroundColor:'hsl('+colorVal+',80%,80%)'}"></div></div><script src="https://unpkg.com/vue@3/dist/vue.global.js"></script><script>const app = Vue.createApp({data() {return {colorVal: 50}}})app.mount('#app')</script>
在 v-for 循环中使用 v-on
您也可以在 v-for 循环中使用 v-on 指令。
数组的项可用于 v-on 值内的每次迭代。
实例
显示基于食物数组的列表,并为每个项目添加一个点击事件,该事件将使用阵列项目中的值来更改图片的来源。
<div id="app"><img v-bind:src="imgUrl"><ol><li v-for="food in manyFoods" v-on:click="imgUrl=food.url">{{ food.name }}</li></ol></div><script src="https://unpkg.com/vue@3/dist/vue.global.js"></script><script>const app = Vue.createApp({data() {return {imgUrl: 'img_salad.svg',manyFoods: [{name: 'Burrito', url: 'img_burrito.svg'},{name: 'Salad', url: 'img_salad.svg'},{name: 'Cake', url: 'img_cake.svg'},{name: 'Soup', url: 'img_soup.svg'}]}}})app.mount('#app')</script>
v-on 的简写
v-on 的简写方式是 @。
实例
我们这里使用 @ 替换 v-on:
<button @:click="lightOn = !lightOn">Switch light</button>
我们将在本教程稍后开始 @ 使用语法。