Menu
×
   ❮   
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

Vue v-on 指令

与纯 JavaScript 中的事件处理类似,Vue 中的 v-on 指令告诉浏览器

  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">切换灯光</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' 的简写是 '@'。

示例

这里我们只写 '@' 而不是 'v-on'

<button @:click="lightOn = !lightOn">切换灯光</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>

开始练习



×

Contact Sales

If you want to use W3Schools services as an educational institution, team or enterprise, send us an e-mail:
[email protected]

Report Error

If you want to report an error, or if you want to make a suggestion, send us an e-mail:
[email protected]

W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.

Copyright 1999-2024 by Refsnes Data. All Rights Reserved. W3Schools is Powered by W3.CSS.