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" 数据属性在 truefalse 之间切换,使灯泡后面的黄色 <div> 可见/隐藏。

  1. <div id="app">
  2. <div id="lightDiv">
  3. <div v-show="lightOn"></div>
  4. <img src="img_lightBulb.svg">
  5. </div>
  6. <button v-on:click="lightOn = !lightOn">Switch light</button>
  7. </div>
  8. <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
  9. <script>
  10. const app = Vue.createApp({
  11. data() {
  12. return {
  13. lightOn: false
  14. }
  15. }
  16. })
  17. app.mount('#app')
  18. </script>

oninput 事件

使用 v-on:input 在元素获得输入时执行操作,就像在文本字段中击键一样。

实例

计算输入文本字段的点击次数:

  1. <div id="app">
  2. <input v-on:input="inpCount++">
  3. <p>{{ 'Input events occured: ' + inpCount }}</p>
  4. </div>
  5. <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
  6. <script>
  7. const app = Vue.createApp({
  8. data() {
  9. return {
  10. inpCount: 0
  11. }
  12. }
  13. })
  14. app.mount('#app')
  15. </script>

mousemove 事件

当鼠标指针在元素上移动时,使用 v-on:mousemove 执行操作。

实例

每当鼠标指针在 <div> 元素上移动时,更改该元素的背景色:

  1. <div id="app">
  2. <p>Move the mouse pointer over the box below</p>
  3. <div v-on:mousemove="colorVal=Math.floor(Math.random()*360)"
  4. v-bind:style="{backgroundColor:'hsl('+colorVal+',80%,80%)'}">
  5. </div>
  6. </div>
  7. <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
  8. <script>
  9. const app = Vue.createApp({
  10. data() {
  11. return {
  12. colorVal: 50
  13. }
  14. }
  15. })
  16. app.mount('#app')
  17. </script>

在 v-for 循环中使用 v-on

您也可以在 v-for 循环中使用 v-on 指令。

数组的项可用于 v-on 值内的每次迭代。

实例

显示基于食物数组的列表,并为每个项目添加一个点击事件,该事件将使用阵列项目中的值来更改图片的来源。

  1. <div id="app">
  2. <img v-bind:src="imgUrl">
  3. <ol>
  4. <li v-for="food in manyFoods" v-on:click="imgUrl=food.url">
  5. {{ food.name }}
  6. </li>
  7. </ol>
  8. </div>
  9. <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
  10. <script>
  11. const app = Vue.createApp({
  12. data() {
  13. return {
  14. imgUrl: 'img_salad.svg',
  15. manyFoods: [
  16. {name: 'Burrito', url: 'img_burrito.svg'},
  17. {name: 'Salad', url: 'img_salad.svg'},
  18. {name: 'Cake', url: 'img_cake.svg'},
  19. {name: 'Soup', url: 'img_soup.svg'}
  20. ]
  21. }
  22. }
  23. })
  24. app.mount('#app')
  25. </script>

v-on 的简写

v-on 的简写方式是 @

实例

我们这里使用 @ 替换 v-on:

  1. <button @:click="lightOn = !lightOn">Switch light</button>

我们将在本教程稍后开始 @ 使用语法。