Vue v-on
指令
与纯 JavaScript 中的事件处理类似,Vue 中的 v-on
指令告诉浏览器
- 要监听哪个事件('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">切换灯光</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>{{ '输入事件发生次数:' + 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>将鼠标指针移动到下面的方框上</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
值内的每次迭代中都可用。
示例
根据 food 数组显示一个列表,并为每个项目添加一个点击事件,该事件将使用数组项目中的值来更改图像的源。
<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
' 的简写是 '@
'。
我们将在本教程的稍后部分开始使用 @
语法。