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
' 的簡寫就是 '@
'。
我們將在本教程稍後開始使用 @
語法。