Vuev-on指令

就像纯 JavaScript 中的事件处理一样,v-onVue 中的指令告诉浏览器:

  1. 监听哪个事件(“click”、“keydown”、“mouseover”等)
  2. 当该事件发生时该怎么办

使用示例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>
亲自试一试 »

鼠标移动事件

使用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-ona 内的指令v-for环形。

数组的项目可用于内部的每次迭代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>

开始练习