Vue基础教程(48)内置指令之v-on:Vue事件通灵师:v-on让你和网页“对上暗号”!附实战代码

一、v-on:你和网页的“微信对话框”

想象一下:网页是个高冷的朋友,你戳他一下(点击),他才会回话。而v-on就是他的微信号,负责把你的动作翻译成他懂的语言!比如你敲键盘、点鼠标、甚至手机划屏,全靠v-on帮你传话。

传统JS事件绑定多麻烦? 得写addEventListener,还要记得解绑,代码乱成毛线团。Vue的v-on直接用@符号搞定(是的,@是v-on的缩写),比如:

<button @click="showAlert">戳我有惊喜!</button>

就这么一行,点击按钮自动触发showAlert方法!Vue还贴心帮你自动管理事件销毁,再也不用担心内存泄漏。

👉 新手常见坑:方法名别写成函数调用!比如@click="showAlert()"反而会直接执行。要像叫人名字,不是催人干活!


二、v-on基础玩法:从“点外卖”到“打游戏”

1. 点击事件:点奶茶式交互
<div id="app">
  <button @click="orderMilkTea">加一杯珍珠奶茶</button>
  <p>订单:{{ milkTeaCount }}杯</p>
</div>

<script>
  new Vue({
    el: '#app',
    data: { milkTeaCount: 0 },
    methods: {
      orderMilkTea() {
        this.milkTeaCount++;
        console.log('奶茶正在制作中...');
      }
    }
  })
</script>

逻辑解析:点击按钮就像扫码点单,orderMilkTea方法被调用,数据实时更新。比线下喊服务员还快!

2. 键盘事件:游戏作弊码既视感
<input @keyup.enter="submitForm" placeholder="按回车发送">

比如聊天框,按回车直接发送。Vue内置了entertab等常见键的别名,不用背键码值!

3. 鼠标事件:悬停查看隐藏彩蛋
<img @mouseover="showHint" src="谜题图片.jpg">

鼠标悬停图片时显示提示,适合游戏说明或产品介绍。


三、高级技巧:事件修饰符,你的“防手残神器”

场景1:点外卖但怕手抖下错单?

.stop阻止事件冒泡:

<div @click="close菜单">
  <button @click.stop="下单">确认下单</button>
</div>

比喻:就像奶茶杯套了防烫圈,点击按钮不会触发外层div的关闭事件!

场景2:提交表单但不想刷新页面?

.prevent阻止默认行为:

<form @submit.prevent="handleSubmit">
  <input type="submit" value="提交">
</form>

相当于默认的刷新页面行为被“截胡”,全权交给Vue处理。

场景3:游戏大招冷却期?用.once限制触发次数
<button @click.once="releaseUltimate">必杀技(仅一次)</button>

点击一次后自动失效,防止玩家狂按作弊。


四、实战代码:动态任务管理器(直接复制可用)

功能:添加任务、标记完成、悬停预览、快捷键删除

<!DOCTYPE html>
<html>
<head>
  <title>v-on实战:任务管理器</title>
  <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
  <style>
    .completed { text-decoration: line-through; }
    .task { cursor: pointer; margin: 10px; padding: 10px; border: 1px solid #ccc; }
  </style>
</head>
<body>
  <div id="app">
    <input v-model="newTask" @keyup.enter="addTask" placeholder="输入任务,按回车添加">
    <ul>
      <li v-for="(task, index) in tasks" 
          :class="{ completed: task.done }"
          @click="task.done = !task.done"
          @mouseover="showDetail(index)"
          @mouseleave="hideDetail">
        {{ task.name }}
        <button @click.stop="deleteTask(index)">删除</button>
        <span v-if="task.showHint" style="color:gray">(右键可标记完成)</span>
      </li>
    </ul>
    <p>已完成:{{ completedCount }} / {{ tasks.length }}</p>
  </div>

  <script>
    new Vue({
      el: '#app',
      data: {
        newTask: '',
        tasks: []
      },
      computed: {
        completedCount() {
          return this.tasks.filter(t => t.done).length;
        }
      },
      methods: {
        addTask() {
          if (this.newTask.trim()) {
            this.tasks.push({ 
              name: this.newTask, 
              done: false, 
              showHint: false 
            });
            this.newTask = '';
          }
        },
        deleteTask(index) {
          this.tasks.splice(index, 1);
        },
        showDetail(index) {
          this.tasks[index].showHint = true;
        },
        hideDetail() {
          this.tasks.forEach(task => task.showHint = false);
        }
      }
    })
  </script>
</body>
</html>

代码亮点拆解:

  1. @keyup.enter:回车快速添加任务,符合用户习惯
  2. @click切换完成状态,@click.stop防止点击删除时误触发完成
  3. 鼠标悬停提示用@mouseover@mouseleave控制显隐
  4. 计算属性completedCount自动统计进度,数据驱动界面更新

五、避坑指南:v-on常见翻车现场

  1. 方法在模板里不生效? 检查是否在methods中定义,而非data里!

需要事件对象怎么办? 直接传$event

<button @click="handleClick('参数', $event)">提交</button>
  1. 动态事件名:用方括号@[eventName],比如事件名根据场景切换。

结语:v-on是Vue的“社交达人”

它让网页从静态说明书变成能聊天的伙伴。掌握v-on后,你会发现交互设计就像教朋友懂你的暗号:点击是“嗨”,悬停是“你猜猜”,键盘事件是“摩斯密码”…… 剩下的,就是尽情创造让用户惊喜的对话了!

彩蛋:用@dblclick实现双击彩蛋效果,比如连续点击LOGO三次触发隐藏动画——这不就是互联网时代的“芝麻开门”吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

值引力

持续创作,多谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值