Vue v-on 指令

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>
亲自试一试 »

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


Vue 练习

通过练习测试自己

练习题:

完成代码,以便在单击按钮时切换图像。

<template>
  <button ="showImg = !showImg">
    Toggle image
  </button>
  <img src="flower.jpg" alt="flower" v-show="showImg">
</template>

<script>
  export default {
    data() {
      return {
        : true
      }
    }
  }
</script>

开始练习